将NSDictionary中的数组读入UITableViewCell子视图

时间:2011-08-31 19:19:26

标签: iphone uitableview plist nsdictionary fast-enumeration

我试图将下面的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和没有myString3的第二行中的myString2)。

<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>

1 个答案:

答案 0 :(得分:0)

解释为什么这段代码完全正常工作。我相信你只发布部分代码。

  1. UILabel *label = (UILabel *)cell;将创建一个指向精确的指针 相同的项目cell并覆盖那里的任何内容。
  2. 如果dictionarynil,那么[dictionary objectForKey:@"ArrayKey"]必定会导致崩溃。
  3. id key应该是NSString *key才能分配给它 label.text
  4. 您不是在任何地方添加标签作为子视图。
  5. 您至少需要[cell.contentView addSubView:label];