Чтение массива в NSDictionary в UITableViewCell Subviews - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь прочитать приведенный ниже словарь 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 в одной строке и myString2 во второй строке без 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>

1 Ответ

0 голосов
/ 31 августа 2011

Мистификация, почему этот код работает вообще.Я уверен, что вы публикуете только частичный код.

  1. UILabel *label = (UILabel *)cell; создаст указатель на точно такой же элемент cell и перезапишет все, что там есть.
  2. Если dictionary равно nil, то [dictionary objectForKey:@"ArrayKey"] должно вызватьсбой.
  3. id key должен быть NSString *key, чтобы присвоить его label.text.
  4. Вы нигде не добавляете метку в качестве подпредставления.

Вам нужно как минимум [cell.contentView addSubView:label];.

...