2017-04-26 11 views
0

ビューコントローラ経由でNSArrayController(順番にテーブルビューにバインドされています)をNSDocumentインスタンスのNSArrayプロパティにバインドする正しい方法を見つけ出すことができません。配列コントローラをNSDocument配列プロパティにバインドする方法は?

私のNSDocumentサブクラスは、プロパティNSArray * pagesを持っています。私は最初にビューコントローラのpagesプロパティを反映しましたが、それはNSDocumentが項目をpages配列に追加したときにテーブルビューが更新されないことを意味します。この場合更新を強制する唯一の方法は、ビューコントローラ内にwill../didChangeValueForKey:@"pages"のいずれかですが、ビューコントローラから変更がトリガされていない場合は実用的ではありません。 NSDocumentにwill/didChangeValueForKeyを呼び出すと、アレイコントローラは更新されません。

私はViewControllerのdocument.pagesに直接バインドしようとしましたが、動作していないか、少なくとも更新を表示していません。

ここで適切な手法は何でしょうか?

+0

'pages'プロパティが[KVO Compliance](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOCompliance.html#/)のルールに従っているかどうかをチェックしましたか?/apple_ref/doc/uid/20002178-BAJEAIEE)? – Willeke

+0

NSDocumentはNSObjectから継承しているので、私はそれがKVOに準拠していると仮定します。 pagesプロパティは '@property(nonatomic、strong)NSMutableArray * pages;と定義されています - 私が理解していることから、それは必要なすべてでなければなりません。 – fbitterlich

+0

'self.pages = someArray' yesを実行した場合、' [self.pages addObject:someObject] 'を実行すると、 'mutableArrayValueForKey:'や 'willChange:valuesAtIndexes:forKey:'/'didChange:valuesAtIndexes:forKey:'を使う必要があります。 – Willeke

答えて

0

解決済み - 問題が私が探していた場所ではないにもかかわらず。

私はこのように作成したdocumentプロパティにアレイコントローラを結合した

動作しません
- (Document *)document { 
    return (Document *)self.view.window.windowController.document; 
} 

、それはKVO-互換性がないため。解決策は、単にNSDocumentインスタンスをself.representedObjectに割り当てることです。これは「実際の」プロパティであり、したがって観察可能です。 Willekeは彼のコメントで示唆した複数の特定のバージョンは、おそらくより正確であるが、willChangeValudForKey:/didChangeValueForKey:

pages配列へのラッピング変更は、期待通りにバインドされたアレイコントローラを更新する作業を行います。

関連する問題