gpt4 book ai didi

iphone - UITableView moveRowAtIndexPath 方法期间崩溃

转载 作者:行者123 更新时间:2023-12-03 19:40:04 24 4
gpt4 key购买 nike

我有一个字符串数组,已经在我的 uitableview 中显示了。

当为我的uitableview启用编辑时,我试图将字符串从第四行移动到第三行,当我调试它时,我在代码索引部分的插入对象中得到EXC_BAD_ACCESS。

[myStringsArray insertObject:name atIndex:toIndexPath.row]; 

但是,如果我不调试而只是构建并运行,我会打印以下行,然后它会崩溃,而不会在控制台中看到 EXC_BAD_ACCESS。

NSLog(@"re-ordered myStringsArray array");

这是我的 moveRowAtIndexPath 方法的所有代码:

// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [paths objectAtIndex:0];
NSString *path = [documentsDirectoryPath stringByAppendingPathComponent:@"MyStrings.plist"];

//re-order array
NSString *name = [myStringsArray objectAtIndex:fromIndexPath.row];
[myStringsArray removeObjectAtIndex:fromIndexPath.row];
[myStringsArray insertObject:name atIndex:toIndexPath.row];

NSLog(@"re-ordered myStringsArray array");
if([myStringsArray writeToFile:path atomically: YES]){NSLog(@"write succesful");}
else {NSLog(@"write failed");}

[myTable reloadData];
}

知道为什么它认为我正在尝试访问不存在的东西吗?

如果我错了,请纠正我,但我的可变数组已经分配,​​如果删除方法有效,为什么插入方法不起作用?

谢谢

最佳答案

当您从数组中删除对象时,它会被释放,因此它的保留计数很可能会变为 0 并且会被释放。为了避免过早释放,您可以保留和释放对象:

NSString *name = [[myStringsArray objectAtIndex:fromIndexPath.row] retain];
[myStringsArray removeObjectAtIndex:fromIndexPath.row];
[myStringsArray insertObject:name atIndex:toIndexPath.row];
[name release];

或者更好地使用内置的 NSMutableArray 方法来交换您自己找到的对象:

[myStringsArray exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];

关于iphone - UITableView moveRowAtIndexPath 方法期间崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com