NSMutableArray removeObjectAtIndex在第二次执行时崩溃

Pon*_*ays 0 cocoa-touch uitableview nsmutablearray ios

我有一个包含许多行的tableview,我希望能够删除这些行.填充tableview的数据存储在NSMutableArray中.要删除一行上的数据我打电话:

- (void)deleteFromArray:(NSUInteger) number{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];  //load NSUserDefaults
    NSMutableArray *storedArray = [[ NSMutableArray alloc] init];
    storedArray = [prefs objectForKey: @"mydata"];
    [storedArray removeObjectAtIndex:number];

    [prefs setObject:storedArray forKey:@"mydata"];
    [storedArray release];
    [prefs synchronize];

}
Run Code Online (Sandbox Code Playgroud)

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        subscribe *subscribeclass = [subscribe alloc];
        [subscribeclass deleteFromArray: indexPath.row];
        [myTableView reloadData];
    }
}
Run Code Online (Sandbox Code Playgroud)

这在我第一次删除行时工作正常.但是当我删除秒行时,应用程序在deleteFromArray中的以下行崩溃:

[storedArray removeObjectAtIndex:number];
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

huk*_*kir 5

来自NSUserDefaults的数组是NSArray,而不是NSMutableArray.您应该将代码修改为:

- (void)deleteFromArray:(NSUInteger) number{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];  //load NSUserDefaults
    NSMutableArray *storedArray = [[prefs objectForKey:@"mydata"] mutableCopy];
    [storedArray removeObjectAtIndex:number];

    [prefs setObject:storedArray forKey:@"mydata"];
    [storedArray release];
    [prefs synchronize];
}
Run Code Online (Sandbox Code Playgroud)

这将创建不可变数组的副本并使其可变,以便您可以对其进行修改.