1

NSMutableArray (arrayOfFiles) にバインドする NSTreeController によって制御されるコンテンツを表示する NSOutlineView があります。配列には NSTreeNode オブジェクトが含まれており、そこでは、presentedObject (Fileobject クラス) が多数の ivar を保持しています。特定のオブジェクトの「方向」という名前の ivar を編集および更新したいと考えています。オブジェクトごとに保存した NSIndexPath を使用して、目的のオブジェクトを取得することができました。

[self.myOutlineViewController.myTreeController setSelectionIndexPath:myIndexPath];

Fileobject *myObject =[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject];

[myObject setDirection:0];

これは問題なく動作しますが、NSIndexPath で抽出したばかりのオブジェクトを更新するときに問題が発生します。次のクラッシュ:[self.myOutlineViewController.myTreeController removeObjectAtArrangedObjectIndexPath:myIndexPath];エラーメッセージとともに

An uncaught exception was raised
2012-11-08 17:23:25.557 S3access[20379:12b03] *** -[NSKeyValueSlowMutableArray     removeObjectsAtIndexes:]: value for key myArrayOfFiles of object 0x40012e460 is nil

ここでキーと値のコーディングに何か問題があることは理解していますが、それが何であるかを確認できません。Apple のすべての例で解決策を探してみましたが、NSTreeController と NSTreeNode を使用していない例しか見つかりません。私の考えは、1) indexpath でオブジェクトを抽出する 2) 抽出されたオブジェクトを編集する 3) indexpath で現在のオブジェクトを削除する 4) command を使用して、新しく編集したオブジェクトを indexpath に挿入することでした[self.myOutlineViewController.myTreeController insertObject:myNode atArrangedObjectIndexPath:myIndexPath];。ivar だけではなくオブジェクト全体を置き換える場合、キー値コーディングを使用してオブジェクトを置き換える方法がわかりません。

私が間違っていることについての提案と、これを解決する方法についての提案は高く評価されています。

乾杯、そしてありがとう!トロンド

4

1 に答える 1

1

私は最終的に NSOutlineView の更新を適切に機能させることができました.私の質問は極端なタンブルウィードだったので、少なくとも答えを更新すると思いました. 私の問題は、プログラミングの問題ではなく、KVC の適切な理解の欠如であることがわかりました。Stackoverflow とAppleのドキュメントに関する質問への回答を読んだ後、NSOutlineView とその NSTreeController コンテンツ (arrangedObjects) の動的更新を有効にする方法を最終的に見つけました。これらは NSTreeNode を使用して表されます。オブジェクトの NSIndexPath (myIndexPath) を知っていると仮定すると、次のコードが機能しました。

[self.myOutlineViewController.myOutlineView willChangeValueForKey:@"direction"];
[[[[self.myOutlineViewController.myTreeController.arrangedObjects descendantNodeAtIndexPath:myIndexPath] representedObject] representedObject] setDirection:0];
[self.myOutlineViewController.myOutlineView didChangeValueForKey:@"direction"];

うまくいけば、これは他の人に役立つかもしれません。乾杯、トロンド

于 2012-11-26T04:01:40.133 に答える