Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改NSManagedObject上的属性,是否发送通知?_Ios_Objective C_Core Data_Nsmanagedobject - Fatal编程技术网

Ios 更改NSManagedObject上的属性,是否发送通知?

Ios 更改NSManagedObject上的属性,是否发送通知?,ios,objective-c,core-data,nsmanagedobject,Ios,Objective C,Core Data,Nsmanagedobject,我是否可以在一个位置更改NSManagedObject的属性,然后在其他位置获得通知 我需要从服务器下载一堆照片和每张照片的信息。在我的数据模型中,我检索所有照片的信息,然后将NSManagedObject传递给自定义UIView,以显示照片和照片的图像。我还没有设置UIImageView的图像,因为我没有它 然后,我的模型开始从服务器异步检索每张照片。照片下载完成后,我想为照片设置NSManagedObject属性(只是一个NSData属性)。当我这样做时,我希望自定义的UIView得到一个对

我是否可以在一个位置更改NSManagedObject的属性,然后在其他位置获得通知

我需要从服务器下载一堆照片和每张照片的信息。在我的数据模型中,我检索所有照片的信息,然后将
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,但似乎是最直截了当的。那将是糟糕的。您不希望将视图控制器连接到网络调用。视图控制器应侦听核心数据。