2012-04-09 12 views
-1

Ich habe zwei View-Controller. Der erste hat einen Übergang zu einem anderen View-Controller. Was ich für den letzten View-Controller möchte, ist das Hinzufügen von Elementen, die aus einem Textfeld kommen, und das Speichern in einem Array durch einen Klick auf die Schaltfläche. Dann wird dieses Array mit NSUserDefaults gespeichert.Behalten der Werte eines Arrays gespeichert mit NSUserDefaults

Auf den folgenden Code kann ich Elemente in meinem Array erfolgreich speichern. Dieses Array wird auch mit NSUserDefaults gespeichert. Wenn ich jedoch zu meinem ersten View-Controller zurückkehre und dann wieder mit meinem zweiten View-Controller fortfahre, um neue Elemente auf meinem Array hinzuzufügen, sind die zuvor gespeicherten Elemente verschwunden. Die neu hinzugefügten Artikel wurden als einzige gespeichert.

Jemand sagte, ich muss etwas Serialisierung machen, wie wird das gemacht? und wenn es eine andere Möglichkeit ist, Ratschläge bitte :)

in meinem .h-Datei

@interface AddCardViewController : UIViewController <UITextFieldDelegate> 

@property (strong, nonatomic) IBOutlet UITextField *cardNameTextField; 

@end 

in meiner .m-Datei

@interface AddCardViewController() 

@property (nonatomic, strong)NSMutableArray *nameOfCards; 

@end 


@implementation AddCardViewController 

@synthesize cardNameTextField = _cardNameTextField; 

@synthesize nameOfCards = _nameOfCards; 


// setting my array 
- (NSMutableArray *)nameOfCards 
{ 
    if (!_nameOfCards) _nameOfCards = [[NSMutableArray alloc] init]; 

    return _nameOfCards; 
} 

- (void) viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 

    self.cardNameTextField.delegate = self; 
} 


- (BOOL) textFieldShouldReturn:(UITextField *)textField{ 

    [self.cardNameTextField resignFirstResponder]; 

    return YES; 
} 

- (void)viewDidLoad 
{ 
    //getting the data saved 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSMutableArray *cardName = [defaults objectForKey:@"cardName"]; 

    NSLog(@"contents of my array %@", cardName); 

    [super viewDidLoad]; 

} 

- (IBAction)addNewCard:(id)sender { 
    [self.nameOfCards addObject:self.cardNameTextField.text]; 
    NSLog(@"contents :%@", _nameOfCards); 


    // this is how to save the data 

    NSMutableArray *cardName = _nameOfCards; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setObject:cardName forKey:@"cardName"]; 

    [defaults synchronize]; 

    NSLog(@"data saved"); 

} 

@end 
+0

helfen, wenn Sie klicken addnewcard es Array in NSUserDefaults spart. Aber wenn Sie zu diesem Viewcontroller zurückkehren, ist Ihr Array gleich Null. Wenn Sie also etwas hinzufügen, wird es in Ihrem Array gespeichert und dann in userdefaults gespeichert. Also jedes Mal, wenn Sie neue Dinge in Array und Userdefaults hinzugefügt. –

+0

in addNewCard-Methode - lesen Sie Daten von NSUserDefaults in NameOfCards, dann fügen Sie neue hinzu, dann speichern Sie – SVGreg

+0

mögliche Duplikate von [So behalten Sie die Werte eines Arrays] (http://stackoverflow.com/questions/10069593/how-to- Retain-the-Werte eines Arrays –

Antwort

0

so nehmen MutableArray in AppDelegate und alloc init in appdidfinishlaunching. Wenn du also etwas von anderen Ansichten hinzufügst, ersetzt es deine Daten nicht.

Vielleicht wird es Ihnen helfen.

0

Meiner Meinung nach ein hypothetischer Fehler ist wie folgt:

NSMutableArray * = cardName _nameOfCards; 

Hier _nameOfCards initialisiert und dann auf 0 Elemente gesetzt, dann machen Sie einen Verweis mit Kartenname, die anfänglich den Wert hatte, was Platten storato, so jetzt hat cardName nicht mehr den alten Inhalt, sondern nur den neuen. Von hier aus liegst du falsch.

Sie sollten ein addObject von cardName von _nameOfCards machen.

Hoffnung, die

Verwandte Themen