设备密码锁定时无法保存核心数据托管对象上下文

Posted

技术标签:

【中文标题】设备密码锁定时无法保存核心数据托管对象上下文【英文标题】:Can't save core data managed object context when device passcode locked 【发布时间】:2013-05-15 15:54:01 【问题描述】:

我正在创建一个像这样的持久存储协调器:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Mydatabase.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
      if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])

问题是,只要我在任何托管对象上下文上发出保存,它就会失败并出现以下错误:

May 15 17:46:18 xx-iPad @WorkMail[2807] <Warning>: Core Data: annotation: -executeRequest: encountered exception = Updating max pk failed:  with userInfo = 
        NSSQLiteErrorDomain = 14;
    
May 15 17:46:18 xx-iPad @WorkMail[2807] <Warning>: Core Data: annotation: -executeRequest: encountered exception = Updating max pk failed:  with userInfo = 
        NSSQLiteErrorDomain = 14;
    
May 15 17:46:18 xx-iPad @WorkMail[2807] <Warning>: Core Data: annotation: -executeRequest: encountered exception = Updating max pk failed:  with userInfo = 
        NSSQLiteErrorDomain = 14;
    

这是一个错误,另一个错误是错误 21 和授权被拒绝错误。

如果未启用密码锁定,则不会发生这种情况。我正在使用单个持久存储协调器从后台线程写入核心数据。

【问题讨论】:

我已经弄清楚这是什么。问题不是核心数据问题,而是启用密码锁定时数据保护被启用到***别的事实,这阻止了对应用程序文档目录中的任何文件的任何写入。该问题是由另一个团队成员更改应用 ID 引起的。因此,如果您点击此选项,请检查您的应用 ID 和开发者证书属性。 嘿@Lee!考虑将其发布为answer to your own question。 【参考方案1】:

我已经弄清楚这是什么。问题不是核心数据问题,而是启用密码锁时数据保护被启用到***别的事实,这阻止了对应用程序文档目录中任何文件的任何写入。该问题是由另一个团队成员更改应用 ID 引起的。因此,如果您点击此选项,请检查您的应用 ID 和开发者证书属性。

【讨论】:

你能告诉我们什么是appid和证书的依赖关系,因为我想在设备锁定时将数据写入核心数据。请告诉我如何解决这个问题谢谢

以上是关于设备密码锁定时无法保存核心数据托管对象上下文的主要内容,如果未能解决你的问题,请参考以下文章

在核心数据中保存到托管对象上下文时的 SIGABRT

核心数据和托管对象上下文

核心数据:托管对象与上下文一起保存后如何撤消操作

撤消核心数据托管对象

核心数据:创建多个托管对象,但只保存一些?

核心数据单一托管对象上下文和两个线程