CoreData NSManagingContextDidSaveChangesNotification 保存空对象iOS5

Posted

技术标签:

【中文标题】CoreData NSManagingContextDidSaveChangesNotification 保存空对象iOS5【英文标题】:CoreData NSManagingContextDidSaveChangesNotification saves empty object iOS5 【发布时间】:2013-05-01 22:53:29 【问题描述】:

在任何人建议之前,我们将一个 managedObjectContext 用于[context save:&error];

我们正在使用 ios5 在 Core Data 中保存一个新对象。

问题是,当我们第一次保存新对象时,NSManagingContextDidSaveChangesNotification 会触发,[[notification userInfo] objectForKey:NSUpdatedObjectsKey] 会返回一个未填充的对象。在 iOS6 中,objectForKey:NSUpdatedObjectsKey 被填充。

之后,当我们保存 objectForKey:NSUpdatedObjectsKey 时会填充。

我们一直使用的上下文是[[UIApplication sharedApplication] delegate].mainDocument.managedObjectContext

所以问题是,第一次调用 [context save:&error] 时,没有任何内容保存到数据库中。但它已经被保存到对象中,所以下次调用[context save:&error] 时,它会被放入数据库中。

有没有人知道这方面的信息。我听说过 iOS5 中 CoreData 的错误,所以如果有人有任何建议,我们将不胜感激。

【问题讨论】:

我找到了问题所在。我们正在使用 ALAssetsLibrary 将图像保存到资产库,当您第一次在 iOS5 中执行此操作时,Apple 会提示用户“...希望使用您当前的位置”以获取您保存的任何内容的元数据。此警报会阻止保存上下文。这已通过关闭位置服务得到证明,并且没有问题地保存。它还解释了为什么它只在我们第一次保存时发生,第一次后我们没有收到警报。 【参考方案1】:

按照给定的顺序检查这些项目:

确保第一次保存对象时已填充对象(例如 NSLog)。 确保正确查询通知的 userInfo。 此时请确保物理数据库不包含正确的信息(例如,通过sqlite3 命令行工具) 确保在检查对象是否已填充时输出正确的对象。

【讨论】:

• 如果您查看问题,我说我正在查询通知的用户信息。 你没有提到框架。即使您选中userInfo,上述清单仍然有效。感谢您浪费我的时间。

以上是关于CoreData NSManagingContextDidSaveChangesNotification 保存空对象iOS5的主要内容,如果未能解决你的问题,请参考以下文章

CoreData与CloudKit同步时将图像保存到CoreData?

RestKit + CoreData:从CoreData缓存中排除某些对象

Coredata — 入门使用

认识CoreData—初识CoreData

Coredata 单表简单使用

iOS CoreData