1

コンテンツ配列がファイルの所有者(ウィンドウコントローラー)にバインドされ、モデルキーパスがchartData.eventsに設定されているNSArrayControllerがあります。chartDataはNSObjectのサブクラスであり、eventsは合成されたNSMutableArrayプロパティです。

chartDataは、NSArrayControllerがイベントオブジェクトをeventsプロパティに追加および削除するタイミングを知る必要があります。可変のインデックス付きアクセサーを実装することでこれを行うべきだと思いました。これをchartDataクラスの実装に入れました。

- (void)insertObject:(TNLEvent *)event inEventsAtIndex:(NSUInteger)index {
    [self.events insertObject:event atIndex:index];
    return;
}

- (void)insertEvents:(NSArray *)eventArray atIndexes:(NSIndexSet *)indexes {
    [self.events insertObjects:eventArray atIndexes:indexes];
    return;
}

ただし、NSArrayControllerのadd:メッセージが送信されるときは、これらのメソッドはどちらも呼び出されません。NSArrayControllerによって使用されるキーパスがこれらのメソッドにマップされていないか、キー値に準拠していないと思います。オブジェクトがいつ追加または削除されたかを知るにはどうすればよいeventsですか?

更新:合成されたアクセサーをオーバーライドsetEventsし、配列コントローラーが、制御する配列にオブジェクトを追加するたびにこのメソッドを使用することを発見しました。したがって、可変のインデックス付きアクセサーは使用されません。どのオブジェクトが追加されたかはまだわからないので、これは役に立ちません。

4

1 に答える 1

1

私の解決策は正しかったのですが、必要なアクセサーのすべてを実装していませんでした。

これは、実装する必要のあるアクセサの最小セットのようです。

- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index;
- (id)objectInEventsAtIndex:(NSUInteger)index;
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index;

これらが適切に配置されている場合、配列コントローラーは、配列属性のセッターゲッターの代わりにそれらを使用します。

于 2012-11-06T05:50:50.397 に答える