我创建了一个iOS 8应用程序,它使用新的应用程序组功能与扩展程序共享Core Data存储。它工作得很好,以为我会尝试使用2个独立的应用程序在App Group容器中共享Core Data存储。 但是,虽然它在App和Extension之间起作用,但在与2个应用共享时,我收到Core Data存储损坏问题。
根据我打开2个应用的顺序,我会遇到不同的错误:
Fetches导致此错误:
CoreData:错误:(522)数据库的I / O错误 /private/var/mobile/Containers/Shared/AppGroup/[...].sqlite。 SQLite的 错误代码:522,'不是错误'
保存导致此错误:
CoreData:错误:(11)致命错误。数据库在 /private/var/mobile/Containers/Shared/AppGroup/[...].sqlite是 损坏。 SQLite错误代码:11,'数据库磁盘映像格式错误'
或者:
核心数据:错误:-executeRequest:遇到异常=错误 在SQL执行期间:PRIMARY KEY必须是唯一的userInfo = { NSFilePath =" / private / var / mobile / Containers / Shared / AppGroup / [...]。sqlite&#34 ;; NSSQLiteErrorDomain = 19; } CoreData:错误:(19)PRIMARY KEY必须是唯一的
答案 0 :(得分:0)
这是我如何通过创建一个框架来保存/管理数据库
使用它来创建databaseURL:
[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:
database = [ [UIManagedDocument alloc] initWithFileURL: databaseURL]
[database saveToFileURL: database.fileURL forSaveOperation: UIDocumentSaveForCreating completionHandler: ^(BOOL success)
persistentContainer
。managedObjectModel
必须由框架定义。它不能在任何应用程序中。他们可以看到它,但它必须是框架的一部分。
这是基本大纲,还有更多内容,但有了这个,你应该能够到达那里。玩得开心!