相关疑难解决方法(0)

如何将Core Data的数据迁移到App Group的数据

我刚刚App Groups使用此StackOverFlow 帖子添加到我的应用程序中。不幸的是,由于defaultDirectoryURL正在发生变化,我无法获取在使用应用程序组目录之前制作的任何旧数据。我知道数据仍然存在,因为当我切换回使用常规NSPersistentContainer而不是 时GroupedPersistentContainer,我可以获取数据。

如何将旧数据迁移到我正在获取应用组数据的位置?

核心数据代码:

class CoreDataManager {
    static let sharedManager = CoreDataManager()
    private init() {}

    lazy var persistentContainer: NSPersistentContainer = {
        var useCloudSync = UserDefaults.standard.bool(forKey: "useCloudSync")

        let containerToUse: NSPersistentContainer?
        if useCloudSync {
           containerToUse = NSPersistentCloudKitContainer(name: "App")
        } else {
            containerToUse = GroupedPersistentContainer(name: "App")
            let description = containerToUse!.persistentStoreDescriptions.first
            description?.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
      }

        guard let container = containerToUse, let description = container.persistentStoreDescriptions.first else {
            fatalError("Hey Listen! ###\(#function): Failed …
Run Code Online (Sandbox Code Playgroud)

migration core-data swift ios-app-group nspersistentcontainer

5
推荐指数
0
解决办法
1673
查看次数

SecurityApplicationGroupIdentifier 的应用程序组返回 nil

我设置了一个应用程序组与我的 Today Extension 一起使用。我在主应用程序的目标和扩展程序的目标中添加了应用程序组。在开发人员门户的应用程序 ID 配置中,我启用了应用程序组。但由于某种原因,FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: id)每当我调用它时都会返回零。我已经检查了三次该forSecurityApplicationGroupIdentifier字符串并知道它是正确的。

有谁知道为什么这不起作用?

编辑:我能够通过编辑我的调试权利以包含应用程序组来解决零问题。我一直在关注这篇文章,并且能够成功地从 NSPersistentContainer 迁移我的数据,但是当我尝试在用户打开 iCloud 时使用 NSPersistentCloudKitContainer 时,同样的方法不起作用。它仍然能够迁移数据,但不允许我在设备之间同步数据(几乎只是使其成为常规的 NSPersistentContainer)。如果我恢复到以前的方式,我就可以使用 iCloud 同步。

NSPersistentCloudKitContainer任何人都可以帮助我解决迁移时使用应用程序组时的同步问题吗?

核心数据代码:

class CoreDataManager {
    static let sharedManager = CoreDataManager()
    private init() {}

    lazy var persistentContainer: NSPersistentContainer = {
        var useCloudSync = UserDefaults.standard.bool(forKey: "useCloudSync")

        //Get the correct container
        let containerToUse: NSPersistentContainer?
        if useCloudSync {
           containerToUse = NSPersistentCloudKitContainer(name: "App")
        } else {
            containerToUse = NSPersistentContainer(name: "App")      
        }

        guard let container = containerToUse else {
            fatalError("Couldn't get …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift ios-app-group

4
推荐指数
1
解决办法
3767
查看次数