0

我有一个基于关系的具有动态属性的 NSManagedObject。我有一个NSFetchedResultsController获取这些对象的列表。但是,当动态属性发生变化时,在发送 KVO 通知时,NSFetchedResultsController永远不会调用它的委托来重新加载 tableView。

- (BOOL)read
{
    return self.lastMessage.read;
}

- (void)setRead:(BOOL)read
{
    [self.messages enumerateObjectsUsingBlock:^(TSMessage *message, BOOL *stop) {
        message.read = read;
    }];
}

+ (NSSet *)keyPathsForValuesAffectingRead
{
    return [NSSet setWithObject:@"lastMessage.read"];
}

如何强制为 managedObject 注册更改?

4

1 回答 1

1

在 Core Data Programming Guide 中,有一整是关于自定义访问器的。本质上,您负责调用通知方法。

如果要实现自己的属性或一对一关系访问器方法,请使用原始访问器方法从托管对象的私有内部存储获取和设置值。您必须调用相关的访问和更改通知方法

因此:

-(BOOL)read {
   [self willAccessValueForKey:@"read"];
   BOOL r = self.lastMessage.read;
   [self didAccessValueForKey:@"read"];
   return r;
}

-(void)setRead:(BOOL)read {
   [self willChangeValueForKey:@"read"];
   [self.messages enumerateObjectsUsingBlock:^(TSMessage *message, BOOL *stop) {
      message.read = read;
   }];
   [self didChangeValueForKey:@"read"];
}
于 2012-11-02T12:56:05.980 回答