iOS 9:使用iCloud的核心数据:挂起addPersistentStoreWithType

时间:2015-11-19 09:03:58

标签: ios core-data

我已将iCloud支持添加到我的核心数据中。当我向数据库添加内容时,关闭应用程序并尝试再次打开它,应用程序无法启动,它挂起在我的启动屏幕上,在控制台中我看到两个信息。首先,它尝试连接到位于... / CoreDataUbiquitySupport / ...的sqlite数据库文件,其次是这个

CoreData: sql: pragma journal_mode=delete

我认为它只发生在模拟器上。

这是什么意思?有什么问题?

它挂起在addPersistentStoreWithType函数上,几分钟后函数返回异常

Error adding persistent store to coordinator: Error Domain=NSCocoaErrorDomain Code=134090 "(null)" UserInfo={NSSQLiteErrorDomain=5, NSUnderlyingException=error during SQL execution : The database operation timed out after 240.00 seconds.

以下是我添加持久存储的方法:

let options = [
        NSInferMappingModelAutomaticallyOption: true,
        NSMigratePersistentStoresAutomaticallyOption: true,
        NSPersistentStoreUbiquitousContentNameKey: "AppCloudStore"
    ]

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
        do {
            self.store = try self.storeCoordinator.addPersistentStoreWithType(NSSQLiteStoreType,
                configuration: nil,
                URL: storeURL,
                options: options)

            self.initialized = true
        } catch let error as NSError {
            print(error)
        }
   })

1 个答案:

答案 0 :(得分:0)

问题似乎与使用journal_mode有关。删除它或将模式更改为WAL后,我不再遇到锁定问题。 (这是在实际设备上使用iOS 9.1,而不是在商店中使用iCloud。)

如果您在挂起期间暂停程序(或者更确切地说是轮询/无限循环;我的CPU处于100%CPU),您可以看到它正在访问fcntl函数(或者有时在sqlite3.dylib中)那段时间)。