Objective C - 核心数据和NSFetchedResultsController?

时间:2011-10-24 22:56:22

标签: objective-c core-data nsfetchedresultscontroller

所以我有一个获取的结果控制器,它返回一个对象列表。 我试图检测对象的任何更改,包括对子对象的更改

对象具有这些属性(NSString myString, NSSNumber myNumber, Object2 myObject2)

因此对myStringmyNumber的任何更改都会导致FetchedResultController通知委托。但是对myObject2属性的更改不会触发fetchedResultController来调用委托。

我做错了吗?我想手动让myObject知道它必须通知fetchedResultController吗?

2 个答案:

答案 0 :(得分:0)

当您“更改”myString并且您的NSFetchedResultsController(NSFRC)响应其事件时,您需要了解实际发生的事情。

NSFRC正在使用Key Value Observing查看您的更改。现在,假设yourObj是您上面提到的对象,那么当您键入:yourObj.myString = @"New String"[yourObj setMyString:@"New String"]时,任何接收到观察该属性的接收者(您的NSFRC!)都会收到通知,因为设置者正在呼唤你的对象。

因此,当您调用它时,您没有收到关于“子对象”的通知,因为您没有访问NSFRC正在观察的属性,而是访问子对象的属性。

要触发子对象的通知,您需要调用对象上的子对象设置器。 (即[myObj setObject2:obj2]

答案 1 :(得分:0)

所以这就是答案:

在子类(myObject2)中实现以下方法,并在每个keyValue更改时通知所有者类

- (void)willChangeValueForKey:(NSString *)key
{
   [super willChangeValueForKey:key];
   [self.myMainObject willChangeValueForKey:@"myObject2"];
}

- (void)didChangeValueForKey:(NSString *)key
{
   [super didChangeValueForKey:key];
   [self.myMainObject didChangeValueForKey:@"myObject2"];
}