0

以下の plist 辞書を UITableView のセルに読み込もうとしています。次のように、ArrayKey で示される配列に含まれる各文字列のサブビューを作成します。

Row1: | myString1 |
Row2: | myString2 || myString3 |

ディクショナリを読み取るために高速列挙を使用しましたが、各配列の最初の文字列のみを正常に読み取ることができます。

    CGFloat constant = 0;

    for (NSArray key in [dictionary objectForKey:@"ArrayKey"]) {


        UILabel *label = (UILabel *)cell; 
        label.text = (NSString *)key;
        label.frame = CGRectMake(0 + constant, 0, 30, 30);

        constant = 20 + CGRectGetMaxX(label.frame);
        }

サブビューのピースがありません。そして、高速列挙の NSLog を追加すると、出力に配列内のすべての文字列が表示されるのに、最初の文字列しか表示できない理由がわかりません (つまり、myString1 を 1 行に、myString2 を 2 行目に myString3 なしで)。

<dict>
    <key>TitleKey</key>
    <string>myTitle1</string>
    <key>ArrayKey</key>
    <array>
        <string>myString1</string>
    </array>
</dict>
<dict>
    <key>TitleKey</key>
    <string>myTitle2</string>
    <key>ArrayKey</key>
    <array>
        <string>myString2</string>
        <string>myString3</string>
    </array>
</dict>
4

1 に答える 1

0

このコードがまったく機能している理由がわかりません。部分的なコードのみを投稿していると確信しています。

  1. UILabel *label = (UILabel *)cell;まったく同じアイテムへのポインターを作成し、cellそこにあるものを上書きします。
  2. その場合、クラッシュが発生する必要がありdictionaryますnil[dictionary objectForKey:@"ArrayKey"]
  3. id keyNSString *keyに割り当てるには、 にする 必要がありますlabel.text
  4. ラベルをサブビューとしてどこにも追加していません。

少なくとも[cell.contentView addSubView:label];.

于 2011-08-31T19:29:56.637 に答える