0

我对objective-c比较陌生,并且我有一些编程经验。所以我的问题如下:

我在用

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

}

这样我就可以在编辑样式时移动行。当测试数组中的对象是唯一的时,一切正常。但是当 2 个或更多对象相同时,应用程序崩溃。例如,如果数组中的字符串是:@" BOB" ​​, @"LINDA" , "JOHN" ,我可以移动行就好了。但是当字符串是:@"BOB",@"LINDA",@"JOHN",@"BOB","@BOB “应用程序崩溃

原因如下:

*由于未捕获的异常“NSRangeException”而终止应用程序,原因:“-[__NSCFArray insertObject:atIndex:]: index (2) beyond bounds (1)”

你能帮我么?谢谢你。

4

2 回答 2

0

使用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];
}
于 2013-02-22T15:26:00.017 回答
0

具有相同字符的字符串的地址应该相同(常量指针),因此如果您删除一个项目@“BOB”,如果其中有另一个字符串@“BOB”,您可能会从数组中删除它们。

我宁愿使用该removeObjectAtIndex函数而不是与对象相关的删除函数,并在必要时将插入索引路径调整为-1(如果到索引路径位于从索引路径后面)。

注意

我刚刚做了一个小测试,确实从数组中删除了 @"BOB" ​​两次这个字符串删除了两个字符串。

于 2013-02-22T15:39:35.580 回答