Проблема работы с NSMutableArray для хранения объектов, отличных от строк, в UITableViewController - PullRequest
0 голосов
/ 01 марта 2010

Я новичок в использовании iPhone SDK и Objective C. У меня глупая проблема с объектом NSMutableArray.

У меня есть класс Team и класс Player. Класс Team имеет объект NSMutableArray, который содержит объекты Player. Класс Team инициализируется конструктором initWithTitle:(NSString*)title. Player имеет Name свойство.

Теперь у меня есть простое приложение на основе навигации с UITableViewController, которое показывает строку с Add Player. Когда эта строка выбрана, она открывает UIViewController с текстовым полем, в котором пользователь может ввести имя нового игрока (напр., Player1). При нажатии на кнопку «Назад» строка с новым именем игрока должна появиться над строкой «Добавить игрока». После добавления второго игрока (например, Player2), строки должны выглядеть следующим образом:
Player1
Player2
Добавить игрока

Я использую PlayerUpdatedDelegate с методом
-(void)PlayerUpdated:(NSString*)playerName; для перевода имени нового игрока обратно в UITableViewController при нажатии кнопки «Назад». В этом методе я создаю новый Player объект и добавляю к Team используя [team.players addObject:player];

Проблема, с которой я сталкиваюсь, заключается в том, что после ввода имени игрока и нажатия кнопки «Назад» происходит сбой приложения, когда я пытаюсь получить доступ к имени игрока способом - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath, как показано ниже:

if (indexPath.row < [team.players count]) {
    Player *player = [team.players objectAtIndex:indexPath.row];
    [cell textLabel].text = [player name]; // This is the line that fails........
    [player autorelease];
}
else {
    [cell textLabel].text = @"Add New Player";
}

return cell;

Любая помощь будет принята с благодарностью. Благодарю. Если вы хотите взглянуть на простое приложение, я загрузил его по адресу: http://www.box.net/shared/y4ct7carfr

Ответы [ 2 ]

0 голосов
/ 01 марта 2010

Я нашел решение. Когда я извлекал объект Player из NSMutableArray, я не приводил его к Player. Когда я разыгрываю это, это работает. Так что это решает.

0 голосов
/ 01 марта 2010

Вы не использовали self со свойством, синтезируйте. Когда ты пишешь

title = teamTitle;

сохранение количества заголовков не будет увеличиваться, и программа также будет аварийно завершать работу в случае освобождения класса Team, потому что вы освобождаете заголовок, количество сохранений которого равно 0. Исправьте ошибки, подобные этой

self.title = teamTitle;

Сначала исправьте соответствующие коды и повторите попытку. Редактировать

В -(void) setPlayerName:(NSString *)playerName попробовать

self.name = playerName;
...