0

テーブルビューの行を削除しようとしています。その後、更新されたテーブルビューをNSUserdefaultの配列に保存します。次のようになります。

 - (void)tableView:(UITableView *)tableView 

 commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

  forRowAtIndexPath:(NSIndexPath *)indexPath {


NSMutableArray *stringsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"history"];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *history = [NSMutableArray arrayWithArray:[prefs objectForKey:@"history"]];    
 NSUInteger row = [indexPath row];

 NSUInteger count = [stringsArray count];


 if (row < count) {



    [stringsArray removeObjectAtIndex:row];


  [prefs setObject:history forKey:@"history"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [tableView reloadData]; 

    NSLog(@"tabort %d", row);
    NSLog(@"tabort %d", count);    
    NSLog(@"tabort %@", stringsArray);

    }

    }

実行すると1つの行を削除できますが、保存されません。次の行を削除しようとすると、次のメッセージが表示されます。

2012-04-15 11:02:58.704 test220 [88546:f803] *キャッチされなかった例外'NSInternalInconsistencyException'が原因でアプリを終了しています、理由:'-[__ NSCFArray removeObjectAtIndex:]:変更メソッドが不変オブジェクトに送信されました'

私は何が間違っているのですか?

4

1 に答える 1

3

行を変更してみてください:

NSMutableArray *stringsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"history"];

に:

NSMutableArray *stringsArray = [NSMutableArray arrayWithArray: [[NSUserDefaults standardUserDefaults] arrayForKey:@"history"]];
于 2012-04-15T09:17:16.227 に答える