请查看我的代码,我用来在我的表视图中添加动态单元格添加运行时间。在选择我的表格视图时,我调用了这种方法。
- (void) allServersFound
{
// called from delegate when bonjourservices has listings of machines:
NSArray *newPosts = [[NSArray alloc]initWithObjects:@"A", nil]; // NSArray of machine names;
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil];
int i = 0;
for (NSArray *count in newPosts)
{
[tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
}
[[self tblHome] beginUpdates];
[[self tblHome] insertRowsAtIndexPaths:tempArray withRowAnimation:UITableViewRowAnimationNone];
[[self tblHome] endUpdates];
[tempArray release];
}
但这会在运行时给出以下异常: * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSIndexPath _fastCStringContents:]:无法识别的选择器发送到实例0x4e0e130
答案 0 :(得分:1)
首先使用以下字符串初始化 tempArray :
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil];
然后你添加这样的indexPaths:
[tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
因此传递给 insertRowsAtIndexPaths 方法的数组包含字符串和indexPaths对象。我认为这是例外的原因。
答案 1 :(得分:1)
正如其他人所说,您的tempArray
包含NSString
和NSIndexPath
个对象的混合。这是您在做其他事情之前需要解决的最明显的事情。您可以使用[NSMutableArray array]
类方法(它已自动发布,因此您需要在方法结束时删除对[tempArray release]
的调用)。
一个不太明显的事情是,在调用insertRowsAtIndexPaths
之前,必须更新UITableView 的模型,否则你会得到另一个例外显而易见的地方。
答案 2 :(得分:0)
您的tmparray
包含NSString
值以及IndexPath
,请先尝试删除NSString
。
尝试更换行
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil];
行
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects:nil];