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 次 |
最近记录: |