核心数据和iCloud添加预先填充的sqlite文件
我正在使用Core Data和iCloud在多个iPad之间同步数据的应用程序。 这一切都工作正常,我可以添加数据到每个iPad,它会同步它们之间的所有。
我有一个核心数据sqlite文件,预填充的国家列表,我想复制到应用程序的第一次运行文档区域。 我有这个工作,但已经改变了我的persistentStoreCoordinator实施,以testing是否支持iCloud和其他一些小的变化。
但是,现在当我检查,看是否存在sqlite文件,并复制预填充SQLite文件,如果没有我在下面的错误
[psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:iCloudData] options:options error:&persistentStoreError];
NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error :: CoreData:Ubiquity:设置无处不在集成时发生错误:Error Domain = NSCocoaErrorDomain Code = 134316“无处不在的容器似乎不匹配这个持久存储,这是可能的是由于切换到不同的iCloud帐户,或者完全从iCloud注销引起的,应该使用只读属性重新打开存储或从iCloud永久同步删除存储。 UserInfo = 0x1cb590 {storeUUID = 31381598-EAFA-4550-9B96-F501800974D5,containerUUID = E3A8DC7D-41FD-405A-8D8A-C06C8B467CA2,NSLocalizedDescription =无处不在的容器似乎不匹配这个永久性存储,这可能是由切换到另一个iCloud帐户,或完全注销iCloud。 商店应该以只读属性重新打开,或者从iCloud永久同步中删除。}
这是因为在iCloud中还有不同的Core Data sqlite文件或事务日志文件? 如果是这样,我将如何删除它们?
您不应该将预先创build的Core Data存储复制到无处不在的容器中。 旧的方法是在模拟器/设备/计算机上创build一个SQLite文件,并将其复制到第一次运行的位置。 如果您使用iCloud,则无法再进行此操作。 iCloud可以通过每台设备接收一系列更改为“事务日志”,然后将其应用于自己的SQLite存储。 它需要知道发生了什么变化,并获得一个.sqlite文件一个一个不会告诉它。
iCloud的做法是:
- 从代码中创build初始数据(例如
insertStartData:
方法)。 你可以从plist中添加它,或者你喜欢的任何东西。 您必须先检查数据是否已经在那里。 - 使用
NSPersistentStoreCoordinator
的migratePersistentStore:toURL:options:withType:error
来复制初始存储。
这里是文档:
您不应该使用预先打包的数据库文件对初始内容进行种子处理。 相反,您应该在代码中创build默认项目,或使用NSPersistentStoreCoordinator的migratePersistentStore:toURL:options:withType:error:方法将预打包数据库迁移到所需位置。
- 使用completionSelector和completionTarget与UIImageWriteToSavedPhotosAlbum
- 键盘阻塞UITableViewCell的UITextField?
- 家长MOC获取来自儿童MOC的空数据的变化
- NSFetchedResultsController似乎是插入空的对象数组?
- CoreData TableView里面的UIViewController
- 如何在Core Data中使用Swift 4 Codable?
- NSPredicate用于检测属性的类
- 为什么NSManagedObject实例不能强制引用NSManagedObjectContext?
- 如何获取viewController的managedObjectContext,而不是从appDelegate获取?
- NSManagedObject的自定义初始值设定项
- 用于打开商店的模型与用于创build商店的模型不兼容