UILabel с раскадровкой iOS: я могу указать текст явно, но ввести stringWithFormat: не могу установить текст

Это странно. У меня есть метка на моей раскадровке в пользовательской ячейке прототипа с тегом 102. Как следует из названия темы, я могу установить текст метки различными способами, и он появится на устройстве, как и ожидалось. Вот методы, которые я пробовал, которые работают:

nameLabel.text = @"My buddy's name";
nameLabel.text = [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"];
[nameLabel setText:[[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]];

Эти, однако, не работают...

NSString *nameString = [NSString stringWithFormat:@"game with %@", [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]];
[nameLabel setText:nameString];

также...

[nameLabel setText:[NSString stringWithFormat:@"game with %@", [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]]];

и...

nameLabel.text = [NSString stringWithFormat:@"game with %@", [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]];

Мне нужно, чтобы в ячейках было написано: «игра с таким-то», где «такой-то» — это, очевидно, имя соперника. Любые идеи относительно того, что может вызвать это?

РЕДАКТИРОВАТЬ: Вот еще немного кода, демонстрирующего, как я атакую ​​эту штуку:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MatchCell"];
    UILabel *nameLabel = (UILabel *)[cell viewWithTag:102];
    ...
}

if (indexPath.section == 0) {
    nameLabel.text = [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"];
    [nameLabel setText:[[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]];
    NSString *nameString = [NSString stringWithFormat:@"game with %@", [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]];
    [nameLabel setText:nameString];
    [nameLabel setText:[NSString stringWithFormat:@"game with %@", [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]]];
    nameLabel.text = [NSString stringWithFormat:@"game with %@", [[self.matchArray objectAtIndex:indexPath.row] valueForKey:@"player2Username"]];
}
        return cell;
}

Я использую Parse в качестве BaaS. Там действительно не возникает проблем, так как я могу получить, зарегистрировать и отобразить на своем iPhone (в ячейке) имя пользователя игрока и любые другие данные, которые я хочу, если я не включаю stringWithFormat:.

Пробовал чистить проект и папку сборки, удалять с устройства и т.д. Перезапускал. Все равно не повезло.


person baptzmoffire    schedule 06.11.2013    source источник
comment
как ты получаешь свой лейбл?   -  person ManicMonkOnMac    schedule 06.11.2013
comment
Я не уверен, что именно вы спрашиваете, ManicMonkOnMac. Я перетащил метку в свой прототип ячейки из библиотеки объектов. Я присвоил тег в инспекторе атрибутов. Я пытаюсь присвоить строку метке из tableView:cellForRowAtIndexPath:. Сами строковые данные — здесь, кажется, нет проблемы, так как я могу регистрировать то, что хочу, и даже получить имя пользователя в ячейку на устройстве, ПОКА Я НЕ ИСПОЛЬЗУЮ stringWithFormat: — извлекаются из серверы моей внутренней службы. Кажется, stringWithFormat: это корень проблемы.   -  person baptzmoffire    schedule 07.11.2013


Ответы (1)


Новая ошибка. Я не увеличил размер UILabel достаточно широко, чтобы вместить дополнительный текст. То есть я мог бы явно указать строку (например, nameLabel.text = @"имя игрока";), и было бы достаточно места для имени игрока, но всякий раз, когда я пытался добавить "игра с" к любому имени пользователя, это привело к тому, что вся строка стала слишком длинной для небольшой ширины UILabel. Итак, я предполагаю, что это возвращалось к тексту метки (который я установил в Интерфейсном Разработчике/Раскадровке), "игра с...".

Короче говоря, убедитесь, что ваши UILabels достаточно широки, чтобы вместить текст, который они будут обрабатывать, ребята! Если вы этого не сделаете, кто-то заболеет, забеременеет или еще хуже. Я видел это тысячу раз.

person baptzmoffire    schedule 06.11.2013