2012-04-15 4 views
0

Ich versuche, eine Zeile in der Tabellenansicht zu löschen und danach die aktualisierte Tabellenansicht in NSUserdefault in einem Array zu speichern. Es sieht wie folgt aus:Versuch, eine Tabellenansichtszeile in einem NSUserdefault-Array zu löschen

- (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); 

    } 

    } 

Wenn ich es laufen kann ich eine Zeile löschen, aber wird es nicht gespeichert und wenn ich versuche, um die nächste Zeile löschen es mit der folgenden Meldung Craches:

2012 -04-15 11: 02: 58,704 test220 [88546: F803] * Terminating app aufgrund abgefangene Ausnahme 'NSInternalInconsistencyException', Grund: '- [__ NSCFArray removeObjectAtIndex]: Mutieren Methode unveränderliches Objekt gesendet'

Was mache ich falsch?

Antwort

3

Versuchen Sie, die Linie zu ändern:

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

zu:

NSMutableArray *stringsArray = [NSMutableArray arrayWithArray: [[NSUserDefaults standardUserDefaults] arrayForKey:@"history"]]; 
+0

Danke. Jetzt stürzt es nicht mehr ab, speichert es aber immer noch nicht in NSUserdefaults – user1301000

+0

Das liegt daran, dass Sie nichts mit der "history" -Instanz tun. Versuchen Sie, den Fluss zu organisieren - Nehmen Sie alles aus NSUserDefaults, manipulieren Sie die Daten und speichern Sie sie am Ende und synchronisieren Sie sie zurück. Überprüfen Sie die Daten in Ihrem Debugger, bevor es synchronisiert wird – Stavash

+0

Danke für den Zeiger stavash, es half mir, es zu lösen. – user1301000

Verwandte Themen