最初:@ keeluuの答えは正しいとマークする必要があります。あなたは、コードではなく、IBを介してこれをやっている場合は
プログラム
それをやって、「落とし穴」のために外を見るためにあります。
// Assume 'anObjectController' is an NSObjectController.
// Assume 'userDefaultsController' is [NSUserDefaultsController sharedUserDefaultsController]
// Assume 'someDictionary' is an NSDictionary in userDefaults.
[self.anObjectController
bind:NSContentBinding
toObject:userDefaultsController
withKeyPath:@"values.someDictionary"
options:@{NSHandlesContentAsCompoundValueBindingOption: @YES}];
あなたが上記の操作を行う場合、あなたは、あなたがsomeDictionary
にプロパティにごUI要素をバインドする際に、これらのUI要素を正しくユーザデフォルト内にある値が表示されますことがわかりますが、次の場合はこのようになりますそれらを変更します(たとえば、バインドされたチェックボックスをクリックすると)、それらの値はユーザーのデフォルトでは更新されません。古い値がくっついています。
理由
結合はNSContentObjectBinding
代わりのNSContentBinding
にする必要があります。 NSObjectControllerクラスは、contentObject
という名前のバインディングを公開します。バインドすると、すべて正常に動作します。
これはXcodeのコード補完が自動的にNSContentBinding
になり、とにかく最も頻繁に使用されるバインディング名の1つなので、間違いありません。これはちょうど私に何時間ものトラブルをもたらしました。
これはまさに私が今試みていることです。しかし、NSDictionaryの特定の項目を別のテキストフィールドにバインドする必要があります。だから私はあなたが示唆するように、ControllerKey = "Arranged Objects"の横にModelキーパスを使うべきかどうか疑問に思っていました。ありがとう – aneuryzm
これまで私はこれを試しましたが、うまくいきません。しかし、私は、モデルのキーパスは、NSDictionaryに格納されている項目の名前ではないと思います。 – aneuryzm