バインディングを使用して、動的にロードされたオブジェクトとGUIを同期させたいのですが、問題のオブジェクトを同じタイプの別のオブジェクトに置き換えるとすぐに、バインディングが壊れてGUIの更新が停止します。私が何を意味するのかを理解するのに役立つコードを次に示します。
私のインターフェースには、問題のオブジェクトを保持するためのインスタンス変数があります。
@interface AppDelegate : NSObject {
CustomObject *anObject; // This object has a "NSString *textValue" property
}
次に、私の実装では、オブジェクトをインスタンス化します。
- (id) init {
self = [super init];
if (self != nil) {
anObject = [[CustomObject alloc] init];
}
return self;
}
Interface Builderには、「anObject.textValue」にバインドされたテキストフィールドの「値」があります。
このメソッドを呼び出すと:
[anObject setValue:@"Changed anObject.textValue!" forKey:@"textValue"];
次に、テキストフィールドが更新され、新しい値が反映されます。
しかし、私がやりたいのは、アプリケーションの他の場所でいくつかの作業を行った後に与えられたオブジェクトからの値を表示することです。だから私がしたことはこれでした:
- (void)setCustomObject:(CustomObject *)newObject {
anObject = newObject;
}
この操作の結果は、GUIからCustomObjectインスタンス(anObject)へのバインディングを壊しているように見えます。これは、バインドされたオブジェクトが別のインスタンスに置き換えられたことを考えると論理的です。
私が知りたいのは、動的に作成されたCustomObjectのインスタンスでバインディングを機能させ続ける方法があるかどうかです。プログラムですべてのコントロールを再バインドするbind:toObject:forKeyPath:options:必要はなく、(私の知る限り)IBOutletsを使用して取得する必要があります。コントロールを保持して、新しいオブジェクトの値にバインドできるようにします(IMOを使用すると、このバインドは私の状況では役に立たなくなります)。これが唯一の解決策ですか、それともこれに対処するためのより良い、よりクリーンな方法がありますか?
バインディングに関してdevelopper.apple.comや他の場所でたくさんのドキュメントを読みましたが、この特定のケースについて話しているように見えるものは何も見つかりませんでした。
よろしくお願いします!