2016-04-26 14 views
-1

Ich schreibe eine App, die nsmutablearrays speichern und wiederherstellen muss, um eine Tabellenansicht aufzufüllen. Das Array wird gespeichert, aber nicht überschrieben, sobald ich alles zurückgesetzt habe. Ich finde, dass die Werte zusammen kombinieren und gibt mir unzuverlässige Durchschnittswerte ... Code ist unten. Ich habe auch verschiedene View-Controller, die diese Runde Funktion haben ...Speichern und Wiederherstellen von NSMutablearray in NSUserdefaults

// code that adds items to table view and saves a version of the array to nsmutablearray 
NSUserDefaults *prefs = [[NSUserDefaults alloc] 
           initWithSuiteName:@"group.com.DJ.TSTML"]; 


     [tableItems3 insertObject:TimeString2 atIndex:0]; 
     // time string is the time as a nsstring 
     [tableItems4 addObject:[NSNumber numberWithFloat:seconds2]]; 

     [tableview reloadData]; 

     [prefs setObject:self.tableItems4 forKey:@"SavedArray3"]; 
     [prefs setObject:self.tableItems3 forKey:@"SavedArray4"]; 
     // this is saving to insurer defaults 



     NSString *newString = [NSString stringWithFormat:@"%lu", (unsigned long)tableItems3.count]; 

     [Commentcount setText:newString]; 


     NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 

     NSNumber *average = [tableItems4 valueForKeyPath:@"@avg.self"]; 

     Average.text = [formatter stringFromNumber:average]; 


     NSLog(@"Sucess"); 

     [prefs synchronize]; 
    } } 

das Array wieder her:

 NSUserDefaults *prefs = [[NSUserDefaults alloc] 
         initWithSuiteName:@"group.com.DJ.TSTML"]; 

// code used to erase current values in the table view and restore from NSUserDefaults 
     tableItems3 = [[NSMutableArray alloc] init]; 
     tableItems4 = [[NSMutableArray alloc] init]; 
     [tableview reloadData]; 


     NSMutableArray *RestoreArray1 = [[prefs objectForKey:@"SavedArray4"]mutableCopy]; 
     NSMutableArray *RestoreArray2 = [[prefs objectForKey:@"SavedArray3"]mutableCopy]; 

     [tableItems3 addObjectsFromArray:RestoreArray1]; 
     [tableItems4 addObjectsFromArray:RestoreArray2]; 
     if (tableItems3 == nil) { 
      tableItems3 = [[NSMutableArray alloc] init]; 
      tableItems4 = [[NSMutableArray alloc] init]; 
     } 
     [tableview reloadData]; 
     NSLog(@"%@",tableItems4); 


    } 
} 

Vielen Dank im Voraus für jede Hilfe! Mein Problem klar zu sein ist, dass jedes Mal, wenn ich in nsuserdefaults speichern, anstatt das vorherige Array zu überschreiben hält es nur das alte Array und verbindet sich mit dem neuen

+0

mit besserer Formatierung und Dinge zu erklären mehr .. * in der Ansicht aktualisieren soll schienen: (notwendigen Werte wieder herzustellen und die Überschreibung der Handhabung) * das ist ein bisschen vage erklärt mit ein entspannter Ton und nicht leicht von uns, um wirklich Dinge auszuarbeiten – Shubhank

+0

danke, ich bin ein wenig neu zu fragen und habe Notizen @Shubhank – Dj1172564

+0

'NSMutableArray * RestoreArray1 = [[Prefs ObjektForKey: @" SavedArray4 "] MutableCopy]; [tableItems3 addObjectsFromArray: RestoreArray1]; später .. dann [Prefs setObject: self.tableItems4 forKey: @ „SavedArray3“]; ' wie erwartest du es nicht kombinieren, wenn Sie retrievining und dann später – Shubhank

Antwort

0

Ok, also beantwortete ich meine eigene Frage. Als jemand erzogen wurde, kombinierte er sich, weil ich ihn zurückholte, ohne ihn vorher zu überschreiben. Der folgende Code ist, was funktioniert hat ...

NSString *Clearstring = [prefs objectForKey:@"Clear?"]; 
// i created a nsstring that when the method for restarting would change accordingly. 
// so when someone would navigate to this view controller this would fire. 
// if clear is yes i would prevent the code that controled the restore function from restoring and prepare 
// it if it was needed to be restored again. 
     if ([Clearstring isEqualToString:@"Yes"]) { 
      tableItems3 = [[NSMutableArray alloc] init]; 
      tableItems4 = [[NSMutableArray alloc] init]; 

      [prefs setObject:self.tableItems4 forKey:@"SavedArray3"]; 
      [prefs setObject:self.tableItems3 forKey:@"SavedArray4"]; 
      [prefs setObject:@"NO" forKey:@"Clear?"]; 
      [tableview reloadData]; 

     } 
     else{ 
     tableItems3 = [[NSMutableArray alloc] init]; 
     tableItems4 = [[NSMutableArray alloc] init]; 
     [tableview reloadData]; 

     NSMutableArray *RestoreArray1 = [[prefs objectForKey:@"SavedArray4"]mutableCopy]; 
     NSMutableArray *RestoreArray2 = [[prefs objectForKey:@"SavedArray3"]mutableCopy]; 
     [tableItems3 removeAllObjects]; 
     [tableItems4 removeAllObjects]; 

     [tableItems3 addObjectsFromArray:RestoreArray1]; 
     [tableItems4 addObjectsFromArray:RestoreArray2]; 
     if (tableItems3 == nil) { 
      tableItems3 = [[NSMutableArray alloc] init]; 
      tableItems4 = [[NSMutableArray alloc] init]; 
     } 
     [tableview reloadData]; 
     NSLog(@"%@",tableItems4); 

     } 
    } 
Verwandte Themen