0

コレクションノートを観察しようとしています。コードは次のとおりです。

-(void) registerNotesHeaderViewChangeNotification
{
    [self.selectedVegetableGarden addObserver:self forKeyPath:@"notes" options:NSKeyValueObservingOptionNew | NSKeyValueChangeRemoval context:nil];
}

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    MyVegetableGarden *vegGarden = (MyVegetableGarden *) object;

    if([vegGarden.notes count] > 0)
    {
        self.tableView.tableHeaderView = [self createSharingView];
    }

    else
    {
        self.tableView.tableHeaderView = nil; 
    }

}

ここで、notes コレクションからオブジェクトを削除するときに、observeValueForKeyPath メソッドを起動する必要があります。

[self.selectedVegetableGarden.notes removeObject:note];

現在、発砲していません!

4

1 に答える 1

1

NSKeyValueChangeRemovaloptionsのパラメータで渡すことができるオプションではありません-addObserver:forKeyPath:options:context:。これは、メソッドNSKeyValueChangeKindKeyに渡される変更辞書のエントリに含めることができる値の 1 つです。-observeValueForKeyPath:ofObject:change:context:

notesKVO 準拠の方法でプロパティを変更していません。プロパティを介して(おそらく)変更可能なコレクションへのポインターを取得していますnotesが、それを直接変更しています。適切なコレクション ミューテーション アクセサーを実装してから使用する必要があります。

-mutableArrayValueForKey:または-mutableSetValueForKey:メソッドを使用してプロキシを取得し、そのプロキシを介してプロパティを変更することもできます。これにより、適切な KVO 変更通知が生成されます。

于 2013-09-09T03:40:22.187 に答える