Riv*_*era 12 macos core-data nsnotificationcenter ios
我试图观察个别NSManagedObject变化NSManagedObjectContextWillSaveNotification:
- (void)managedObjectContextWillSave:(NSNotification *)notification
{
for (NSManagedObject * object in self.mutableObservedManagedObjects)
{
if (object.hasChanges)
{
[self managedObjectWasUpdated:object];
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是hasChanges当它object.changedValues是空的时候是真的,因此错误地(?)触发managedObjectWasUpdated:.
我试图理解为什么会这样,如果我object.changedValues.count在打电话之前应该更好地检查managedObjectWasUpdated:.
isInserted并且isDeleted都是假的.
根据我的经验,如果实体已经存在,则加载它然后将值设置为等于其先前值的属性,然后记录将被标记为已更新,hasChanges将返回YES,并且changedValues将为空.保存上下文时,更新的内容是名为Z_OPT的特殊Core Data列,它指的是实体更新的次数.对于这些情况,您可以在保存之前执行以下操作:
for (NSManagedObject *managedObject in context.updatedObjects.objectEnumerator) {
if (!managedObject.changedValues.count) {
[context refreshObject:managedObject mergeChanges:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
为了甚至不更新Z_OPT值.
我遇到了同样的问题。我没有获取标志,而是检查了 changedValues() 是否为空。
对于斯威夫特:
if !managedObject.changedValues().isEmpty {
// Has some changed values
}
Run Code Online (Sandbox Code Playgroud)
从 iOS 7 开始,您还可以使用 hasPersistentChangedValues 而不是 changedValues。我认为这表现更好。
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |