我已将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)
}
})
答案 0 :(得分:0)
问题似乎与使用journal_mode
有关。删除它或将模式更改为WAL
后,我不再遇到锁定问题。 (这是在实际设备上使用iOS 9.1,而不是在商店中使用iCloud。)
如果您在挂起期间暂停程序(或者更确切地说是轮询/无限循环;我的CPU处于100%CPU),您可以看到它正在访问fcntl
函数(或者有时在sqlite3.dylib
中)那段时间)。