Dav*_*ney 58 iphone core-data nsmanagedobject nsmanagedobjectcontext
我有一个NSManagedObjectContext,其中我有许多NSManagedObjects的子类,有些是其他人的容器.我想要做的是观察一个顶级对象,通知它对任何属性,关联或它包含的任何对象的属性/关联的任何更改.
使用上下文的'hasChanges'并没有给我足够的粒度.对象'isUpdated'方法仅适用于给定对象(而不是其关联中的任何对象).是否有一个方便的(也许是基于KVO的)我可以观察上下文中仅限于子图的变化?
Bra*_*son 129
您将需要倾听以获取NSManagedObjectContextObjectsDidChangeNotification对数据模型的所有更改.这可以使用如下代码完成:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(handleDataModelChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:myManagedObjectContext];
Run Code Online (Sandbox Code Playgroud)
这将触发-handleDataModelChange:对myManagedObjectContext上下文的任何更改.
你的-handleModelDataChange:方法看起来像这样:
- (void)handleDataModelChange:(NSNotification *)note
{
NSSet *updatedObjects = [[note userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[note userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *insertedObjects = [[note userInfo] objectForKey:NSInsertedObjectsKey];
// Do something in response to this
}
Run Code Online (Sandbox Code Playgroud)
如您所见,通知包含有关更新,删除和插入哪些托管对象的信息.根据该信息,您应该能够根据数据模型的变化采取行动.
Ili*_*rim 19
这是Swift中的一个简单示例:
NotificationCenter.default.addObserver(forName: .NSManagedObjectContextObjectsDidChange, object: nil, queue: nil) { note in
if let updated = note.userInfo?[NSUpdatedObjectsKey] as? Set<NSManagedObject>, updated.count > 0 {
print("updated: \(updated)")
}
if let deleted = note.userInfo?[NSDeletedObjectsKey] as? Set<NSManagedObject>, deleted.count > 0 {
print("deleted: \(deleted)")
}
if let inserted = note.userInfo?[NSInsertedObjectsKey] as? Set<NSManagedObject>, inserted.count > 0 {
print("inserted: \(inserted)")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23945 次 |
| 最近记录: |