1

現在、QuickDialogのQDynamicDataSectionに苦労しています。動的セクションにデータを入力したい。デモから取得した次のコードを実行すると、テンプレートのいくつかのインスタンス、つまり「Somethinghere」が入力された動的セクションが表示されます。しかし、私は「最初」と「2番目」を取得したいと思います。どうすればこれに到達できますか?

QDynamicDataSection *section = [QDynamicDataSection new];
section.title = @"Normal: with elements";
section.bind = @"iterate:something";
section.elementTemplate = [NSDictionary dictionaryWithObjectsAndKeys:
    @"QLabelElement", @"type",
    @"Something here", @"title",
nil];
[root addSection: section];
[root bindToObject:[NSDictionary dictionaryWithObjectsAndKeys:
        [NSArray arrayWithObjects:@"first", @"second", nil], @"something",
        nil]];

ソリューションで編集:

エドゥアルドは私を正しい軌道に乗せました(そしてクレジットを取得します):

  1. テンプレートはバインディングを提供する必要があります
  2. 反復する配列要素は、辞書などのキーコンパイルである必要があります。(バインドはobject機能しないようです)

次のコードは意図したとおりに機能します。

QDynamicDataSection *section = [QDynamicDataSection new];
section.title = @"Normal: with elements";
section.bind = @"iterate:something";
section.elementTemplate = [NSDictionary dictionaryWithObjectsAndKeys:
    @"QLabelElement", @"type",
    @"title:name", @"bind",
nil];
[root addSection: section];

[root bindToObject:[NSDictionary dictionaryWithObjectsAndKeys:
        [NSArray arrayWithObjects:
         [NSDictionary dictionaryWithObject: @"first" forKey: @"name"],
         [NSDictionary dictionaryWithObject: @"second" forKey: @"name"], 
         nil], @"something",
        nil]];

return root; 

@Eduardo Scoz:でexampeコードを採用することをお勧めしSampleDataBuilder.mます。


2番目の編集self(Eduardoによるコメントを参照)を 使用したアプローチも機能します。

4

1 に答える 1

1

「iterate」キーは、辞書内の項目を反復処理するだけで、各要素のテンプレートに基づいて新しい要素を作成します。また、新しいアイテムを配列内のオブジェクトにバインドします。

ただし、あなたの場合、テンプレートはバインディングを定義していないため、作成された新しいアイテムの値は変更されません。@ "bind"、@ "title:object"のようなものを追加する必要があります。(objectは、バインドされている実際のオブジェクトを返すため、そのプロパティに対してバインドしていません。

于 2012-06-18T16:08:40.960 に答える