错误显示为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]]
。
如果您有任何建议,我会很高兴听到他们的意见。如果您需要更多信息,请告诉我。
答案 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
在传递特定消息之前进行检查将有助于您避免崩溃。