私は次の設定をしています:
左のビューに NSCollectionView を表示し、右のビューに detailView を表示する splitView を持つウィンドウ。両方のビューは別々の xib に設定されています。さらに、NSMutableDictionaries (moviesForChoice) の変更可能な配列を管理する (NSArrayController クラスの) Datacontroller があります。dataController は、アプリケーション デリゲートとして設定されます。配列内の映画オブジェクトには、(名前、プロット、ジャンルなど) のようなプロパティがあります。
ここまでは順調ですね...
NScollectionview の xib で、Application.delegate.moviesForChoice を介して NSArraycontroller コンテンツ プロパティをデータ コントローラーにバインドしました。collectionView は、arraycontroller.arrrangedObjects および arraycontroller.selectionIndexes にアクセスします。これは正常に機能し、コンテンツが表示され、コレクションビューで選択が正常に機能します(私のコレクションビューアイテムは選択色をレンダリングします)
detailView の xib で、選択したオブジェクトの情報を collectionview に表示したいと考えています。したがって、配列コントローラーも xib に追加し、コンテンツ配列を Application.delegate.moviesForChoice にバインドし、ビューの NSTextfields をたとえば arraycontroller.selection.name にバインドしました。
ここに私の問題があります: 2 つの xib でウィンドウを開くたびに、コレクションビューには選択可能なすべてのムービーが正しく表示され、詳細ビューにはコレクションビューの最初のオブジェクトの情報が表示されます。コレクション内の別の映画をクリックするたびに、解像度を表示します。item は選択色をレンダリングしますが、detailView は更新されません。
私の理解では、DataController は selectionIndexes の更新について通知されないため、detailView で更新をトリガーできないということです。間違っていたら訂正...
これを解決するために、collectionView xib の arraycontroller の selectionIndexes プロパティを Application.delegate.moviesForChoice.selecionIndexes にバインドしようとしましたが、これは次のエラーで失敗しました: addObserver:forKeyPath:options:context:] is not supported. キーパス: selectionIndexes
これは、datacontroller が配列 moviesForChoice に対して KVO に準拠していないことを意味していると想像できますが、そのために次のメソッドを実装しました。
-(void)insertObject:(NSDictionary *)dict inMoviesForChoiceAtIndex:(NSUInteger)index {
[moviesForChoice insertObject:dict atIndex:index];
}
-(void)removeObjectFromMoviesForChoiceAtIndex:(NSUInteger)index {
[moviesForChoice removeObjectAtIndex:index];
}
-(void)setMoviesForChoice:(NSMutableArray *)a {
moviesForChoice = a;
}
-(NSArray*)moviesForChoice {
return moviesForChoice;
}
-(NSUInteger)countOfMoviesForChoice
{
return [moviesForChoice count];
}
- (void)addMovieForChoiceObject:(Movie *)anObject
{
[moviesForChoice addObject:anObject];
}
どこが間違っているのですか?selectionIndexes に正しくバインドするにはどうすればよいですか?
助けていただければ幸いです。M