1

错误读取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]].

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

4

3 回答 3

1

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

于 2011-02-08T03:04:54.270 回答
0

objectAtIndex:在 a 上定义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子类的对象或对象。

于 2011-02-08T03:06:59.767 回答
0

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

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

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

于 2011-02-08T16:54:12.450 回答