3

ユーザーの既定値に格納されている配列のコレクション プロパティにコントロールをバインドすることは可能ですか?

私は(Xcode 4.3のインターフェイスビルダーで)次のように最大値を配列カウントにバインドしようとしていました:

最大値 (共有ユーザー デフォルト Controller.values.MYArrayName.@count)
バインド先:共有ユーザー デフォルト コントローラー
コントローラー キー:
モデル キー パス: MYArrayName.@count

残念ながら、これはまったく効果がありません (エラーもありません)。

最大値をビュー コントローラーの ivar にバインドし、それをユーザーの既定の値にバインドできます。例えば

NSUInteger maxVal
...

NSUserDefaults* stdUD=[NSUserDefaults standardUserDefaults];
[self bind:@"maxVal" toObject:stdUD withKeyPath:@"MYArrayName.@count" options:nil];

それで:

最大値 (ファイルの owner.maxVal)
バインド先:ファイル所有者
コントローラー キー:
モデル キー パス: maxVal

しかし、私は余分なステップなしでそれをやりたかったでしょう

4

1 に答える 1

5

次の 2 つのオプションを使用して、Interface Builder で standardUserDefaults を使用できます。

最初のオプション

Interface Builder で、User Defaults Controller を Objects にドラッグします。

次に、NSArrayController をドラッグして、"ArrayFromDefaultsController" のような名前を付けます (わかりやすくするため)。モードがクラスであること、およびクラス名が NSArray (または NSMutableArray) であることを確認してください。

[バインディング] タブの [コンテンツ配列] の下:

Bind : ユーザー デフォルト コントローラー

コントローラ キー: 値

モデル キー パス: <#your Key#>

フィールドに移動し、最大値をバインドします。

Bind : ArrayFromDefaultsController

コントローラーキー:arrangedObjects

モデル キー パス: @count

これは、ユーザーのデフォルトで配列にバインドされた配列コントローラーを作成するだけで、フィールドはその配列コントローラーの配列オブジェクトのカウント値にバインドされます。

2 番目のオプション

NSValueTransformer サブクラス (例: ArrayCountValueTransformer) を作成し、クラスに次のように記述します。

+(Class)transformedValueClass {
    return [NSNumber class];
}

- (id)transformedValue:(id)value {
    if (value == nil) {
        return nil;
    } else {
        return [NSNumber numberWithInteger:[value count]];
    } 
}

これにより、ユーザー デフォルトの配列の数がモデル キー パスで認識可能な値に自動的に変換されます。

User Defaults Controller をオブジェクト リストにドラッグします。次に、バインドするフィールドで (最大値で):

Bind : ユーザーデフォルトコントローラー

コントローラ キー: 値

モデル キー パス: <#your key#> (@count なし)

値トランスフォーマー: ArrayCountValueTransformer

于 2013-03-15T16:35:36.907 に答える