我可以在一个位置更改NSManagedObject上的属性并在其他位置获取通知吗?
我需要从服务器下载一堆照片和每张照片的信息。在我的数据模型中,我检索了所有照片的信息,然后将NSManagedObject
传递给自定义UIView
以显示照片和照片的图像。我没有设置UIImageView
的图片,因为我没有。
我的模型然后开始异步地从服务器检索每张照片。当照片完成下载后,我想为照片设置NSManagedObject
属性(只是一个NSData属性)。当我这样做时,我希望自定义UIView
获得对象更改的通知,并将UIImaveView
的图像设置为刚下载的内容。
我的自定义UIView
是否可以判断NSManagedObject何时发生了变化?
我只是因为我注意到当我向NSManagedObject
添加一个Catagory时,当我想设置一个属性时,建议这样做:
-(void)setHasNewData:(NSNumber *)hasNewData {
[self willAccessValueForKey:@"hasNewData"];
[self setPrimitiveValue:hasNewData forKey:@"hasNewData"];
[self didAccessValueForKey:@"hasNewData"];
self.modifiedDateLocal = [NSDate date];
}
答案 0 :(得分:1)
首先,我不建议做这样的set访问器。最好使用动态属性,然后覆盖生命周期方法-willSave
并在那里设置修改日期。这样您就可以获得保存到磁盘的修改日期,并且每次保存时,一次的更新发生在修改日期。你可以这样做:
- (void)willSave
{
[super willSave];
if ([self changedValues][@"modifiedDateLocal"] == nil) return;
[self setModifiedDateLocal:[NSDate date]];
}
当保存发生时,Core Data将在保存发生之前调用每个实体上的-willSave
。如果实体发生了某些变化,那么该过程将重新开始。因此,我们会检查以确保我们尚未修改modifiedDateLocal
以避免无限循环。
至于你的UIView,你可以使用KVO(键值观察)来监视NSManagedObject
的特定实例上的属性,或者你可以听NSManagedObjectContextObjectsDidChangeNotification
任何时候都会触发任何实体的财产变更。但要注意,它非常健谈,因此价格昂贵。