在表视图中添加动态单元格的问题?

时间:2012-02-10 13:38:57

标签: iphone objective-c ios ipad

请查看我的代码,我用来在我的表视图中添加动态单元格添加运行时间。在选择我的表格视图时,我调用了这种方法。

 - (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

3 个答案:

答案 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包含NSStringNSIndexPath个对象的混合。这是您在做其他事情之前需要解决的最明显的事情。您可以使用[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];