bug*_*hix 3 iphone crash uitableview nsmutablearray ios4
我有一系列字符串,我已经在我的uitableview中显示了.
当我的uitableview启用了编辑时,我正在尝试将一个字符串从第4行移动到第3行,当我调试此代码时,我在代码的索引部分插入对象中获得EXC_BAD_ACCESS.
[myStringsArray insertObject:name atIndex:toIndexPath.row];
Run Code Online (Sandbox Code Playgroud)
但是,如果我不调试,只是构建和运行,我打印以下行,然后它崩溃而没有在我的控制台中看到EXC_BAD_ACCESS.
NSLog(@"re-ordered myStringsArray array");
Run Code Online (Sandbox Code Playgroud)
这是我的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];
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么它认为我试图访问不存在的东西?
纠正我,如果我错了,但我的可变数组已经分配,如果删除方法有效,为什么插入方法不起作用?
谢谢
当你从数组中删除对象时,它会被释放,所以很有可能它的保留计数变为0并且它被取消分配.为避免过早释放,您可以保留并释放您的对象:
NSString *name = [[myStringsArray objectAtIndex:fromIndexPath.row] retain];
[myStringsArray removeObjectAtIndex:fromIndexPath.row];
[myStringsArray insertObject:name atIndex:toIndexPath.row];
[name release];
Run Code Online (Sandbox Code Playgroud)
或者更好地使用内置的NSMutableArray方法来交换你自己发现的对象:
[myStringsArray exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2486 次 |
| 最近记录: |