的UITableView Moverows崩溃
我是相当新的Objective-C和我有programming.So我的问题的一些经验如下:的UITableView Moverows崩溃
我使用
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
toIndexPath:(NSIndexPath *)toIndexPath
{
NSString *item = [test objectAtIndex:[fromIndexPath row]];
[test removeObject:item];
[test insertObject:item atIndex:[toIndexPath row]];
}
,这样我可以移动的行如果测试数组中的对象是唯一的,那么一切正常。但是当两个或更多对象相同时,应用程序崩溃。例如,如果数组中的字符串是:@“BOB”,@“LINDA” ,“JOHN”,我可以移动行很好。但当字符串是:@“BOB”,@“LINDA”,@“JOHN”,@“BOB”,“@BOB”应用程序崩溃
具有以下原因:
*终止应用程序由于未捕获的异常 'NSRangeException',原因: ' - [__ NSCFArray insertObject:atIndex:]:索引(2)超出界限(1)'
你能帮我吗? 谢谢。
的地址具有相同字符的字符串应该是相同的(常量指针),因此如果删除了一个项目@“BOB”,那么如果其中存在另一个字符串@“BOB”,则可能将它们从数组中移除。
我宁愿使用removeObjectAtIndex
函数,而不是与对象相关的remove函数,并在必要时将插入索引路径调整为-1(如果索引路径位于from索引路径的后面)。
注意:
我只是做了一个小测试,事实上从一个阵列,两次该字符串删除两个字符串删除@“BOB”。
谢谢你们两位!removeObjectAtIndex做了诀窍!很高兴有知识的人准备好帮忙!谢谢你们。 – coddoc 2013-02-22 15:47:35
当您使用insertObject:atIndex:
你必须确保指数,用于插入的对象,是不是大于或等于[array count]
,否则你必须使用[array addObject:item]
试着这么做:
NSString *item = [test objectAtIndex:[fromIndexPath row]];
[test removeObject:item];
if ([toIndexPath row] < [test count]) {
[test insertObject:item atIndex:[toIndexPath row]];
}
else {
[test addObject:item];
}
您是否尝试过先添加项目然后删除它? – Ares 2013-02-22 15:23:30