我想删除一些项目,但我收到此NSException:
'NSRangeException',原因是: '* - [__ NSArrayM objectAtIndex:]:索引2超出范围[0..1]'
这里是我的代码:
-(void)deletePressed:(id)sender {
if (data.count > 0) {
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/Galeria/"];
NSFileManager *manager = [NSFileManager defaultManager];
for (NSIndexPath *indexPath in itensSelecionados) {
NSString *result = [path stringByAppendingFormat:@"%@", [[manager contentsOfDirectoryAtPath:path error:nil] objectAtIndex:indexPath.row]];
[manager removeItemAtPath:result error:nil];
}
[self viewWillAppear:YES];
}}
任何人都可以帮助吗?
你不能从你迭代通过一个数组中删除的对象。
有可能是你几种解决方案。
一种方法是使用一个额外的可变数组,将认为应删除的所有对象,然后遍历它,并删除原始阵列的对象:
-(void)deletePressed:(id)sender {
if (data.count > 0) {
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/Galeria/"];
NSFileManager *manager = [NSFileManager defaultManager];
NSMutableArray *filesToDelete = [NSMutableArray array];
// Build a list of files to delete
for (NSIndexPath *indexPath in itensSelecionados) {
NSString *result = [path stringByAppendingFormat:@"%@", [[manager contentsOfDirectoryAtPath:path error:nil] objectAtIndex:indexPath.row]];
[filesToDelete addObject:result];
}
// Actually delete the files
for (NSString *indexPathString in filesToDelete) {
[manager removeItemAtPath:indexPathString error:nil];
}
// Why do you call viewWillAppear directly ??
[self viewWillAppear:YES];
}
}
编辑
修正了NSIndexPath
来NSString
在第二次迭代由于蒂亚戈的建议。
你需要做的缺失反向行顺序。 比方说,你有3行,你想在索引0和2删除行。
如果你在索引0删除该行第一,那么当你尝试在指数2删除的行,它崩溃,因为现在只有2左行。
如果您在索引2删除该行第一,然后指数0,一切都会好的。
文章来源: 'NSRangeException', reason: '* -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'