如何解决这个'无法识别的选择器发送到实例'错误?

时间:2011-02-08 02:56:55

标签: iphone nsurl didselectrowatindexpath unrecognized-selector

错误显示为Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MObject objectAtIndex:]: unrecognized selector sent to instance。所以,我得到的是MObject(NSObject的一个子类)的实例正在接收一条它不打算处理的objectAtIndex:消息。

当我点击表格行转到其详细视图(包含UIWebView detailWebView)时,会发生错误。 didSelectRowAtIndexPath的代码如下:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MObjectDetailVC *mObjectDetailVC = [[MObjectDetailVC alloc] initWithNibName:@"MObjectDetailVC" bundle:nil];
mObjectDetailVC.detailURL = [[NSURL alloc] initWithString:[[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] url]];
mObjectDetailVC.title = [[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] name];
[self.navigationController pushViewController:mObjectDetailVC animated:YES];
[mObjectDetailVC release];
}

它正在获取所选url实例的NSString MObject属性,并将其转换为详细视图控制器的NSURL,它只执行基本的[detailWebView loadRequest:[NSURLRequest requestWithURL:detailURL]]

如果您有任何建议,我会很高兴听到他们的意见。如果您需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:1)

看一下mcData的结构。根据您的代码,它和它的成员应该是NSArrays,确保它们是。

答案 1 :(得分:0)

objectAtIndex:NSArray上定义。如果MObject类是NSObject的子类,那么它将不会定义objectAtIndex:方法,这就是错误所说的。

以下调用都会导致崩溃:

mObjectDetailVC.detailURL = [[NSURL alloc] initWithString:[[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] url]];
mObjectDetailVC.title = [[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] name];

确保mcData[mcData objectAtIndex:indexPath.section]都返回NSArray或其子类的对象。

答案 2 :(得分:0)

您可以通过respondsToSelector进行检查以防止崩溃:

您可以阅读更多内容  http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html

在传递特定消息之前进行检查将有助于您避免崩溃。