将cell.textlabel.text与字符串进行比较时,iPhone应用程序崩溃了

时间:2010-10-19 04:20:58

标签: iphone objective-c nstableview

这是一个我正在努力工作的小方案。

我首先用

初始化
- (void)viewDidLoad {

[super viewDidLoad];

rootArray = [[NSMutableArray alloc] initWithObjects:@"Earth",@"Mars",@"Pluto",nil];
moonArray = [[NSMutableArray alloc] initWithObjects:@"Clavius",@"Galileo",@"Ptolamy",nil];
marsArray = [[NSMutableArray alloc] initWithObjects:@"Phobos",@"Delmos",nil];
plutoArray = [[NSMutableArray alloc] initWithObjects:@"Charon",@"Nix",@"Hydra",nil];

self.planetList = rootArray

我只创建5个数组,用rootArray初始化planetList。从那里,我希望使用这些下一个数组来创建表视图。应用程序启动时,planetList将成为主列表,其他3将成为下一个视图调用的数组。所以,我有一些代码来处理这个事件:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


MoonViewController *myMoonViews = [[MoonViewController alloc] initWithNibName:@"MoonViewController" bundle:nil];

UITableViewCell *targetCell = [tableView cellForRowAtIndexPath:indexPath];

if([targetCell.textLabel.text isEqualToString:@"Earth"])
{
    myMoonViews.planetList = moonArray;
    myMoonViews.title = @"First Title";
}

else if([targetCell.textLabel.text isEqualToString:@"Mars"])
{
    myMoonViews.planetList = marsArray;
    myMoonViews.title = @"Second Title";
}

else if([targetCell.textLabel.text isEqualToString:@"Pluto"])
{
    myMoonViews.planetList = plutoArray;
    myMoonViews.title = @"Third Title";
}

 // ...
 // Pass the selected object to the new view controller.
[self.navigationController pushViewController:myMoonViews animated:YES];
[myMoonViews release];
}

我有另一个文件,下一个视图,MoonViewController,它使用我原来的ViewController中的相同代码(工作正常)。但是我不知道我哪里出错了。

附注:

  • planetList是一个NSMutableArray
  • 我不确定将什么放入我的MoonViewController.m的viewDidLoad中(如果这是一个巨大的问题,当我被教导时,我没有被告知。)
  • 如果需要查看更多代码,我将提供。

非常感谢您的帮助!

EDIT1:对不起我绝对应该想到这个。错误是第二个代码块的这一行:

if([targetCell.textLabel.text isEqualToString:@"Earth"])

EDIT2:MoonViewController.m功能:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return planetList.count;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.
cell.textLabel.text = [planetList objectAtIndex: indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;

}

2 个答案:

答案 0 :(得分:0)

您发布的代码没有任何严重错误。因此,你的问题可能在MoonViewController的某个地方。你可以发布tableView方法吗?

  • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

答案 1 :(得分:0)

这不会解决您的问题,但计数不是属性。它可以工作,但实际上你应该使用[planetList count]。

另外,我认为您不需要实际查看textLabel.text的值。您只需检查您的阵列:

if([[moonArray objectAtIndex: indexPath.row] isEqualToString:@"Earth"])