2016-06-01 2 views
3

Ich habe zwei Viewcontrollers in FirstVC speichern, diese TextField- Wert im Wörterbuch stroed schließlich die in NSUserdefault gespeichert Wörterbuch dann in SecondVC Ich möchte diese Daten zeigen Mein Problem ist, dass Jedes Mal, wenn ich neue diskretionäre in NSUserdefault hinzufügen Das alte Wörterbuch wurde ersetzt Ich möchte Daten aller Wörterbücher.Wie ich <code>UITextField</code> für die Registrierung bauen 5 Mehr Wörterbuch in NSUserDefaults

unten ist Code meines FirstVC

-(void)btnReg 

{ 
//data add in disctionary 
    for (int i=1; i<=5; i++) 
    { 
     UITextField *txtTemp=(UITextField *)[self.view viewWithTag:i]; 
     [discRege setObject:[NSNumber numberWithInt:count] forKey:@"no"]; 
     [discRege setObject:txtTemp.text forKey:[arraylblName objectAtIndex:i-1]]; 
    } 
//dictionary add in nsuserdefault 

    [[NSUserDefaults standardUserDefaults]setObject:discRege forKey:@"ABC"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 

//push to SecondVc 
    secondViewController *objSec=[[secondViewController alloc]init]; 
    [self.navigationController pushViewController:objSec animated:YES]; 
    [self.navigationController setNavigationBarHidden:false]; 

} 

unten Code meiner SecondVC ist

ArratTemp =[[NSUserDefaults standardUserDefaults]objectForKey:@"ABC"] ; 
    if (!ArratTemp) 
    { 
     ArratTemp =[[NSMutableArray alloc]init]; 
    } 
    else 
    { 
     ArratTemp = [[[NSUserDefaults standardUserDefaults]objectForKey:@"ABC"]mutableCopy]; 
    } 
    NSLog(@"%@",ArratTemp); 
+1

Grundsätzlich ist es eine ziemlich schlechte Programmiergewohnheit, Benutzerstandardwerte für die Weitergabe von Daten zwischen View-Controllern zu verwenden. – vadian

+0

Ja, @vadian hat recht, Sie können Daten direkt an andere Viewcontroller weiterleiten. keine Notwendigkeit, userdefaults zu verwenden – Lion

+0

ja ich weiß das, aber ich will nur Nserusdefault lernen, deshalb verwende ich es .. – Priya

Antwort

2

Jedes Mal, wenn Sie den gleichen Schlüssel verwenden und ersetzt die bestehenden Wörterbuchobjekt ...

// Using the same key will overwrite the last saved dictionary. 
[[NSUserDefaults standardUserDefaults] setObject:discRege forKey:@"ABC"]; 

Anstatt es als Wörterbuch zu speichern, speichern Sie es als ein Array von Wörterbüchern. Wenn Sie eine neue Registrierung hinzufügen, holen Sie das gespeicherte Array, fügen Sie ein neues Dictionary-Objekt hinzu und aktualisieren Sie die userDefaults mit diesem Array.

mutableArray = [[[NSUserDefaults standardUserDefaults]objectForKey:@"ABC"] mutableCopy]; 
[mutableArray addObject:discReg]; 
[[NSUserDefaults standardUserDefaults] setObject:mutableArraay forKey:@"ABC"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Ich hoffe, es hilft.

+0

Das ist was ich will Danke für diese Antwort ...... :) – Priya

0

Sie überschreiben jedes Mal den gleichen Ausdruck.

Sie haben zwei Lösungen:

Lösung 1.

Shop verschiedene Wörterbücher unter verschiedenen Schlüsseln, die nicht alle unter "ABC". Also in Ihrem for loop kann der Index (i) mehrere Einträge haben, anstatt nur jedes Mal ABC. Hier ist es eine einfache Sache, die Sie selbst lösen können. Stellen Sie sicher, dass Sie nicht alles unter dem gleichen Schlüssel speichern, und Sie werden sie finden;) Zum Beispiel könnten Sie unter [NSNumber numberWithInt:i] speichern und dann durchsuchen Sie Ihre NSUserDefaults für 0, 1, 2, 3 ... und so weiter. Ich empfehle dagegen, Lösung 2 ist der Weg zu gehen.

Lösung 2.

Speichern Sie alle Ihre Wörterbücher in einem Array, und dann in der NSUserDefaults das Array speichern.

Dafür erstellen Sie einfach eine NSMutableArray, die Sie leer lassen, dann fügen Sie Wörterbücher hinzu!

NSMutableArray dataArray = [[NSMutableArray alloc]init]; 

for (int i=1; i<=5; i++) 
    { 
     //Creating new dictionary 
     NSMutableDictionary *currentDict = [[NSMutableDictionary alloc]init]; 
     //Getting the text we want 
     UITextField *txtTemp =(UITextField *)[self.view viewWithTag:i]; 
     NSString *text = txtTemp.text; 

     //This is here because you had it 
     [currentDict setObject:[NSNumber numberWithInt:count] forKey:@"no"]; 

     //All dictionaries will have key = name of the Label, 
     //but you could change it to something static, like 
     // "Content" for example. It'll be easier to find later 
     [currentDict setObject:text forKey:[arraylblName objectAtIndex:i-1]]; 

     //Adding that newly formed dictionary to the mutable array. 
     [dataArray addObject:currentDict]; 
    } 

    //Adding the array containing dictionaries to the NSUSerDefaults 
[[NSUserDefaults standardUserDefaults]setObject:dataArray forKey:@"ABC"]; 

Hinweis: Ich bin nicht ganz sicher, was Sie mit den Wörterbüchern in der for-Schleife tun, aber da Sie den Code nicht zeigen, ich bin zu raten, ihre nicht Teil der Frage. Mit meiner Antwort haben Sie genügend Informationen, um bei Bedarf Korrekturen vorzunehmen.Alles, was Sie sich merken müssen, ist:

  1. ein Wörterbuch erstellen pro Antwort, und nicht ein für alle jedes Wörterbuch in demselben Array
  2. Speichern Setzen
  3. das Array (alle Wörterbücher enthält)
+0

Danke für die Antwort .. ich benutze Ihre zweite Lösung, aber jetzt ist das Problem, dass es das gleiche Wörterbuch viele Zeit hinzufügen wird und ich möchte ein anderes Wörterbuch ................ bedeutet, wenn ich ein Wörterbuch zum ersten Mal hinzufüge, das es enthält und wenn ich hinzufüge zweite Wörterbuch-Array enthalten dasselbe (Lastone) Wörterbuch 2-mal, aber ich möchte 1. Wörterbuch sowie ass zweites Wörterbuch speichern – Priya

+0

Überprüfen Sie meinen Code in der Antwort. Sind Sie sicher, dass Sie jedes Mal ein neues Wörterbuch erstellen? Beachten Sie, dass ich Ihre 'discRege' nicht verwendet habe, sondern stattdessen' currentDic † '. Es ist jedes Mal ein neues Objekt, ** innerhalb der Schleife. Wenn es dort erstellt wird und ** zum Array hinzugefügt wird, nicht die nsuserdefaults **, ist alles in Ordnung. Nur am Ende der Schleife ** fügen Sie das Array (nicht das Wörterbuch) zu nsuserdefault ** –

Verwandte Themen