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?