Ios 更改NSManagedObject上的属性,是否发送通知?
我是否可以在一个位置更改NSManagedObject的属性,然后在其他位置获得通知 我需要从服务器下载一堆照片和每张照片的信息。在我的数据模型中,我检索所有照片的信息,然后将Ios 更改NSManagedObject上的属性,是否发送通知?,ios,objective-c,core-data,nsmanagedobject,Ios,Objective C,Core Data,Nsmanagedobject,我是否可以在一个位置更改NSManagedObject的属性,然后在其他位置获得通知 我需要从服务器下载一堆照片和每张照片的信息。在我的数据模型中,我检索所有照片的信息,然后将NSManagedObject传递给自定义UIView,以显示照片和照片的图像。我还没有设置UIImageView的图像,因为我没有它 然后,我的模型开始从服务器异步检索每张照片。照片下载完成后,我想为照片设置NSManagedObject属性(只是一个NSData属性)。当我这样做时,我希望自定义的UIView得到一个对
NSManagedObject
传递给自定义UIView
,以显示照片和照片的图像。我还没有设置UIImageView
的图像,因为我没有它
然后,我的模型开始从服务器异步检索每张照片。照片下载完成后,我想为照片设置NSManagedObject
属性(只是一个NSData属性)。当我这样做时,我希望自定义的UIView
得到一个对象已更改的通知,并将UIImaveView
的图像设置为刚刚下载的图像
我的自定义UIView
是否可以告知NSManagedObject何时发生了更改
我之所以这样问,是因为我注意到,当我向NSManagedObject
添加类别时,当我想设置属性时,建议按如下方式进行设置:
-(void)setHasNewData:(NSNumber *)hasNewData {
[self willAccessValueForKey:@"hasNewData"];
[self setPrimitiveValue:hasNewData forKey:@"hasNewData"];
[self didAccessValueForKey:@"hasNewData"];
self.modifiedDateLocal = [NSDate date];
}
首先,我不建议使用这样的集合访问器。您最好使用动态属性,然后覆盖生命周期方法
-将保存
,并在其中设置修改日期。这样,您就可以获得修改日期,即保存到磁盘的时间,并且修改日期的更新将在每次保存时进行一次。您可以执行以下操作:
- (void)willSave
{
[super willSave];
if ([self changedValues][@"modifiedDateLocal"] == nil) return;
[self setModifiedDateLocal:[NSDate date]];
}
当保存发生时,核心数据将在保存之前对每个实体调用-willSave
。如果某个实体改变了某些内容,则该过程将重新开始。因此,我们检查以确保我们没有修改ModifiedDataTelocal
,以避免无限循环
对于UIView,您可以使用KVO(键值观察)来观察
NSManagedObject
的特定实例上的属性,也可以侦听NSManagedObjects ContextObjectsIDChangeNotification
,它将在任何实体上的任何属性更改时触发。请注意,它非常健谈,因此价格昂贵。NSNotificationCenter postNotification有什么问题??我能想到的唯一其他选择是让自定义视图调用服务器,以便在完成并保存更改后下载和显示。这似乎打破了MVC,但似乎是最直截了当的。那将是糟糕的。您不希望将视图控制器连接到网络调用。视图控制器应侦听核心数据。