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 には、カスタム アクセサーに関する全体があります。本質的に、通知メソッドを呼び出す責任があります。

独自の属性または対 1 関係アクセサー メソッドを実装する場合は、プリミティブ アクセサー メソッドを使用して、管理対象オブジェクトのプライベート内部ストアとの間で値を取得および設定します。関連するアクセスおよび変更通知メソッドを呼び出す必要があります

したがって:

-(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 に答える