我是使用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
答案 0 :(得分:0)
您没有将self
与属性,合成一起使用。当你写
title = teamTitle;
保留标题的数量不会增加,程序也会在Team类dealloc中崩溃,因为你发布了其保留计数为0的标题。纠正这样的错误
self.title = teamTitle;
首先纠正相关代码并重试。 的修改
-(void) setPlayerName:(NSString *)playerName
尝试
self.name = playerName;
答案 1 :(得分:0)
我找到了解决方案。当我从Player
检索NSMutableArray
对象时,我没有将其转换为Player
。当我施展它时,它有效。这样才能解决它。