如何使用应用程序组与多个应用程序(而不仅仅是扩展程序)共享核心数据,并避免损坏的核心数据存储



我制作了一个iOS 8应用程序,它使用新的应用程序组功能与扩展共享核心数据存储。它运行得很好,我想我会在应用组容器中用两个单独的应用程序共享核心数据存储来尝试它但当它在应用程序和扩展程序之间工作时,我在与两个应用程序共享时遇到了核心数据存储损坏问题

根据我打开两个应用程序的顺序,我会得到不同的错误:

获取导致此错误:

CoreData:错误:(522)处数据库的I/O错误/private/var/mobile/Containes/Shared/AppGroup/[…].sqlite.sqlite错误代码:522,"不是错误"

保存导致此错误:

CoreData:错误:(11)致命错误。位于的数据库/private/var/mobile/Containes/Shared/AppGroup/[…].sqlite是已损坏。SQLite错误代码:11,"数据库磁盘映像格式错误"

或者:

核心数据:错误:-executeRequest:遇到异常=错误在SQL执行期间:PRIMARY KEY必须是唯一的,userInfo={NSFilePath="/private/var/mobile/Contages/Shared/AppGroup/[…].sqlite";NSQLiteErrorDomain=19;}CoreData:错误:(19)PRIMARY KEY必须是唯一的

以下是我如何创建一个框架来保存/管理数据库

  1. 将相同的条目添加到每个应用程序中的应用程序组权限
  2. 使用它创建您的数据库URL使用:

    [NSFileManager defaultManager]containerURLForSecurityApplicationGroupIdentifier:

  3. 数据库=[ [UIManagedDocument alloc] initWithFileURL: databaseURL]

  4. [database saveToFileURL: database.fileURL forSaveOperation: UIDocumentSaveForCreating completionHandler: ^(BOOL success)
  5. 如果成功,初始化persistentContainer
  6. 现在是棘手的部分。。。CCD_ 4必须由框架来定义。它不能在任何应用程序中。他们可以看到它,但它必须是框架捆绑包的一部分。这是基本的大纲,还有很多,但有了这个,你应该能够做到。玩得开心

最新更新