使用NSMutableArray在UITableViewController中存储除字符串之外的对象时出现问题

时间:2010-02-28 21:19:36

标签: iphone uiviewcontroller nsmutablearray uitableview

我是使用iPhone SDK和Objective C的新手。我遇到了NSMutableArray对象的愚蠢问题。

我有一个Team班级和一个Player班级。 Team类有一个NSMutableArray对象,用于保存Player个对象。使用Team构造函数初始化initWithTitle:(NSString*)title类。 Player具有Name属性。

现在,我有一个基于导航的简单应用程序,其中UITableViewController显示了一行添加播放器。选择此行后,它会打开一个UIViewController,其中包含一个textField,用户可以在其中输入新的播放器名称(ex.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 :(得分:0)

您没有将self与属性,合成一起使用。当你写

title = teamTitle;

保留标题的数量不会增加,程序也会在Team类dealloc中崩溃,因为你发布了其保留计数为0的标题。纠正这样的错误

self.title = teamTitle;

首先纠正相关代码并重试。 的修改

-(void) setPlayerName:(NSString *)playerName 尝试

self.name = playerName;

答案 1 :(得分:0)

我找到了解决方案。当我从Player检索NSMutableArray对象时,我没有将其转换为Player。当我施展它时,它有效。这样才能解决它。