所以我有一个获取的结果控制器,它返回一个对象列表。 我试图检测对象的任何更改,包括对子对象的更改
对象具有这些属性(NSString myString, NSSNumber myNumber, Object2 myObject2)
因此对myString
和myNumber
的任何更改都会导致FetchedResultController通知委托。但是对myObject2
属性的更改不会触发fetchedResultController来调用委托。
我做错了吗?我想手动让myObject知道它必须通知fetchedResultController吗?
答案 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"];
}