2010-04-06 125 views
2

我正在使用这个来确定从UITableView的输入结果到下一个视图。以下代码不起作用,但我认为它应该是!这段代码有什么问题吗?

你看到有什么问题吗?

NSString *option = [menuArray objectAtIndex:indexPath.row]; 


if (option == @"New Transaction"){ 

     NTItems *nTItemsController = [[NTItems alloc] initWithNibName:@"NTItems" bundle:nil]; 
     [self.navigationController pushViewController:nTItemsController animated:YES]; 
     [NTItems release]; 
} else if ([option isEqualToString:@"Previous Transactions"]){ 
} else if ([option isEqualToString:@"Reprint a reciept"]){ 
} else if ([option isEqualToString:@"Settings"]){ 
} else if ([option isEqualToString:@"Logout"]){ 
      LoginViewController *nTItemsController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
      [self.navigationController pushViewController:nTItemsController animated:YES]; 
      [nTIemsController release];  

} 

每个项目/对象的定义如下:

[menuArray addObject:[NSDictionary dictionaryWithObjectsAndKeys: 
         NSLocalizedString(@"Logout", @"Logout"), @"title", 
         nil, 
         nil]]; 

回答

0

如果menuArray包含字典,你可以得到的标题密钥在当前选项是这样的:

NSDictionary *option = [menuArray objectAtIndex:indexPath.row]; 

NSString *optionTitle = [option objectForKey:@"title"]; 

if ([optionTitle isEqualToString:@"New Transaction"]) {  
    NTItems *nTItemsController = [[NTItems alloc] initWithNibName:@"NTItems" bundle:nil]; 
    [self.navigationController pushViewController:nTItemsController animated:YES]; 
    [nTItemsController release]; 
} 
else if ([optionTitle isEqualToString:@"Previous Transactions"]) { 
} 
else if ([optionTitle isEqualToString:@"Reprint a reciept"]) { 
} 
else if ([optionTitle isEqualToString:@"Settings"]) { 
} 
else if ([optionTitle isEqualToString:@"Logout"]) { 
    LoginViewController *nTItemsController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
    [self.navigationController pushViewController:nTItemsController animated:YES]; 
    [nTItemsController release];  
} 

顺便说一句,“收据”拼写错误在“重新打印收件人”中。

2

您正在释放一个类对象,而不是你的clases的实例:这是一个非常糟糕的主意(你想[nTItemsController release])。其次,你是通过内存地址比较字符串:你很可能在寻找-isEqual:-isEqualToString:方法。除此之外,它看起来很好。

(我希望你的代码在实际的文件中缩进/格式化得更好......通常你想缩进,而不是在块的最后一行末尾加上大括号......)

+0

我得到我们的最爱:NSCFDictionary isEqualToString:now中的“无法识别的选择器发送到实例”。感谢您更正类对象问题:) – bear 2010-04-06 01:50:06

+0

这意味着'option'不是一个字符串,而是一个'NSDictionary'。你的'menuArray'是否包含字典? – 2010-04-06 02:17:35

+0

检查记录,我正在使用字典。 – bear 2010-04-06 16:29:50

0

使用“isEqualToString”来比较NSString,而“release”方法消息应发送给实例,但发送给类对象。

+0

我得到我们最喜欢的:NSCFDictionary isEqualToString:now中的“无法识别的选择器发送给实例”。感谢您更正类对象问题:) – bear 2010-04-06 01:53:44

0

试试这个:

NSString *option = [menuArray objectAtIndex:indexPath.row]; 

NSAssert([option isKindOfClass [NSString class]], @"Expecting an NSString here!"); 

if ([option isEqualToString:@"New Transaction"]){ 

     NTItems *nTItemsController = [[NTItems alloc] initWithNibName:@"NTItems" bundle:nil]; 
     [self.navigationController pushViewController:nTItemsController animated:YES]; 
     [nTItemsController release]; 
} else if ([option isEqualToString:@"Previous Transactions"]){ 
} else if ([option isEqualToString:@"Reprint a reciept"]){ 
} else if ([option isEqualToString:@"Settings"]){ 
} else if ([option isEqualToString:@"Logout"]){ 
      LoginViewController *nTItemsController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; 
      [self.navigationController pushViewController:nTItemsController animated:YES]; 
      [nTIemsController release];  

}