Zeichenfolge in den NSUserDefaults speichern?


Antworten:


449
NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];

um es später zurück zu bekommen

NSString *savedValue = [[NSUserDefaults standardUserDefaults]
    stringForKey:@"preferenceName"];

1
Gibt es eine Möglichkeit, diese Zeichenfolgenbasis an einem bestimmten Datum zu speichern? Vielen Dank, aber Ihr Code funktioniert genauso wie meiner. Ich erstelle eine benutzerdefinierte Kalender-App, in die der Benutzer seine Notizen schreiben kann. Beispielsweise schreibt der Benutzer am 3. Februar etwas, und dieser Text sollte am 3. Februar gespeichert werden, und wenn der Benutzer zum anderen wechselt Tage, an denen er / sie etwas anderes schreiben konnte, das bis zum heutigen Tag
ansteht

6
Aus irgendeinem Grund funktionierte der Speicherteil nicht richtig, bis ich die Synchronisierungsmethode aufrief. NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre

5
[[NSUserDefaults standardUserDefaults] synchronisieren]; wird veraltet
Juan Boero

49

etwas präziser

-(void)saveToUserDefaults:(NSString*)myString
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    if (standardUserDefaults) {
        [standardUserDefaults setObject:myString forKey:@"timestamps"];
        [standardUserDefaults synchronize];
    }
}

11
Es ist nicht erforderlich, die Nullprüfung für das standardUserDefaultsObjekt durchzuführen . Es ist vollkommen in Ordnung, in Objective-C Nachrichten an nil zu senden.
Jbrennan

12
Aber was noch wichtiger ist, er hat "synchronize" eingefügt - NSUserDefaults ist sehr unberechenbar, wenn Sie dies nicht aufrufen!
PostCodeism

1
standardUserDefaults synchronize hat einige seltsame Fehler für mich behoben, danke!
Scott Roepnack

1
Die Referenz befasst sich mit der synchronizeMethode: "Verwenden Sie diese Methode nur, wenn Sie nicht auf die automatische Synchronisierung warten können (z. B. wenn Ihre Anwendung beendet werden soll)" - NSUserDefaults-Klassenreferenz
eliocs

@jbrennan Obwohl Ihr Kommentar technisch korrekt ist, ist diese Antwort hilfreich, wenn Sie etwas Wichtiges schreiben und sicherstellen möchten, dass es erfolgreich gespeichert wurde. Darüber hinaus wäre es in dieser Hinsicht gut, den Rückgabewert von zu testen (anstatt ihn zu ignorieren) synchronize. Das Dokument sagt: JA, wenn die Daten erfolgreich auf der Festplatte gespeichert wurden, andernfalls NEIN.
Basil Bourque

31

So machen Sie dasselbe mit Swift;

var valueToSave = "someValue"
NSUserDefaults.standardUserDefaults().setObject(valueToSave, forKey: "preferenceName")

Um es später zurückzubekommen;

if let savedValue = NSUserDefaults.standardUserDefaults().stringForKey("preferenceName") {
    // Do something with savedValue
}

In Swift 3.0

var valueToSave = "someValue"
UserDefaults.standard.set(valueToSave, forKey: "preferenceName")

if let savedValue = UserDefaults.standard.string(forKey: "preferenceName") {

}

Vielen Dank, da die ursprüngliche Frage für schnell war, +1
Akshansh Thakur

Nach dem Mittagessen habe ich Probleme mit meinem Zynismusdetektor. Die ursprüngliche Frage wurde 2010 gestellt. Ich habe dies daher positiv bewertet, da Swift heute der richtige Weg ist.
Roy Falk

12

Etwas wie das:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];

Dann abrufen:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];

Sie sollten sich unbedingt die NSUserDefaults-Klassenreferenz von Apple und möglicherweise auch dieses Tutorial ansehen: iPhone-Programmier-Tutorial - Speichern / Abrufen von Daten mit NSUserDefaults


12

Vergessen Sie diese Aussage nicht, da sie sonst möglicherweise nicht immer funktioniert:

[standardUserDefaults synchronize];

7
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];

// saving an NSInteger
[prefs setInteger:42 forKey:@"integerKey"];

// saving a Double
[prefs setDouble:3.1415 forKey:@"doubleKey"];

// saving a Float
[prefs setFloat:1.2345678 forKey:@"floatKey"];

// This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
[prefs synchronize];

Abrufen

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];

// getting an NSInteger
NSInteger myInt = [prefs integerForKey:@"integerKey"];

// getting an Float
float myFloat = [prefs floatForKey:@"floatKey"];

6

[[NSUserDefaults standardUserDefaults] setValue:aString forKey:aKey]


5

Es empfiehlt sich auch, eine Konstante für den Schlüssel zu verwenden, um Fehler zu vermeiden, bei denen Sie nicht mit demselben Schlüssel speichern und lesen

NSString* const TIME_STAMPS_KEY = @"TIME_STAMPS_KEY";

1
-(void)saveToUserDefaults:(NSString*)string_to_store keys:(NSString *)key_for_the_String
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    if (standardUserDefaults) {
        [standardUserDefaults setObject:string_to_store forKey:key_for_the_String];
        [standardUserDefaults synchronize];
    }
}

Und nennen Sie es bei:

[self saveToUserDefaults:@"string_to_store" : @"key_for_the_string"];

Rufen Sie die Zeichenfolge mit folgenden Elementen ab:

NSString * stored_string = [[NSUserDefaults standardUserDefaults] stringforkey:key_for_the_String]

1

Erster Blick

    {
    NSMutableArray *array; }
- (void)viewDidLoad {
    [super viewDidLoad];
    array = [[NSMutableArray alloc]init];
    array = [[NSUserDefaults  standardUserDefaults]objectForKey:@"userlist"];

     NSLog(@"%lu",(unsigned long)array.count);
    if (array>0)
    {
        for (int i=0; i<array.count; i++)
        {
            NSDictionary *dict1 = @{@"Username":[[array valueForKey:@"Username"] objectAtIndex:i],@"Mobilenumber":[[array valueForKey:@"Mobilenumber"] objectAtIndex:i],@"Firstname":[[array valueForKey:@"Firstname"] objectAtIndex:i],@"Lastname":[[array valueForKey:@"Lastname"] objectAtIndex:i],@"dob":[[array valueForKey:@"dob"] objectAtIndex:i],@"image":[[array valueForKey:@"image"] objectAtIndex:i]};
            NSLog(@"%@",dict1);
            NSArray *array1 = [[NSArray alloc]initWithObjects:dict1, nil];
            [[NSUserDefaults standardUserDefaults] setObject:array1 forKey:@"UserList"];
        }

    }
     }

ImagePicker

     - (void)imagePickerController:(UIImagePickerController *)picker         didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.imaGe.image = chosenImage;

    [picker dismissViewControllerAnimated:YES completion:NULL];
     }
  • (IBAction) submitBton: (id) sender {

    NSMutableArray *array2 = [[NSMutableArray alloc]initWithArray: 
    [[NSUserDefaults standardUserDefaults]objectForKey:     
        @"userlist"]];                                
    
    UIImage *ima = _imaGe.image;
    NSData *imagedata = UIImageJPEGRepresentation(ima,100);
    
    NSDictionary *dict =  @{@"Username":_userTxt.text,@"Lastname":_lastTxt.text,@"Firstname":_firstTxt.text,@"Mobilenumber":_mobTxt.text,@"dob":_dobTxt.text,@"image":imagedata};
    
       [array2 addObject:dict];
      [[NSUserDefaults standardUserDefaults]setObject:array2    
      forKey:@"userlist"];
       NSLog(@"%@",array2);
    
      [self performSegueWithIdentifier:@"second" sender:self];
    
     }
    • (IBAction) selectImg: (id) Absender {

      UIImagePickerController * picker = [[UIImagePickerController
      alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType =
      UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController: Picker animiert: YES Vervollständigung: NULL];

      }}


zweite Ansicht {NSMutableArray * arr; }}

- (void)viewDidLoad {
    [super viewDidLoad];

     arr =[[NSMutableArray alloc]init];
    arr = [[NSUserDefaults standardUserDefaults]objectForKey:@"userlist"]; }

#pragma mark- TableView DataSource

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1; }

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return arr.count; }

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"tablecell";
    TableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:cellId];
    cell.userLbl.text =[[arr valueForKey:@"username"] objectAtIndex:indexPath.row];
    cell.ageLbl.text =[[arr valueForKey:@"dob"] objectAtIndex:indexPath.row];
    cell.profileImg.image =[UIImage imageNamed:[[arr valueForKey:@"image"] objectAtIndex:indexPath.row]];
    return cell; }

1

In Swift5 und Xcode 10.2

//Save
UserDefaults.standard.set(true, forKey: "Key1") //Bool
UserDefaults.standard.set(1, forKey: "Key2")  //Integer
UserDefaults.standard.set("This is my string", forKey: "Key3") //String
UserDefaults.standard.synchronize()

//Retrive
UserDefaults.standard.bool(forKey: "Key1")
UserDefaults.standard.integer(forKey: "Key2")
UserDefaults.standard.string(forKey: "Key3")

//Remove
UserDefaults.standard.removeObject(forKey: "Key3")

Hinweis: Speichern Sie Textdaten (dh Zeichenfolge, Array, Wörterbuch usw.) in UserDefaults. Speichern Sie keine Bilder in UserDefaults, es wird nicht empfohlen (Bilder im lokalen Verzeichnis speichern).


0

Verwenden Sie zum Speichern Folgendes:

[[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"KTerminated"];
[[NSUserDefaults standardUserDefaults]synchronize];

Verwenden Sie zum Abrufen Folgendes:

[[[NSUserDefaults standardUserDefaults]stringForKey:@"KTerminated"] isEqualToString:@"YES"];

0

Hier für Swift erstelle ich zwei Funktionen, die das Speichern und Abrufen des Werts für den Schlüssel aus den Einstellungen erfordern

Möglicherweise ist dies eine vollständige Hilfe für Sie

// zum Speichern des Objekts

static func setObject(value:AnyObject ,key:String)
{
    let pref = NSUserDefaults.standardUserDefaults()
    pref.setObject(value, forKey: key)
    pref.synchronize()
}

static func getObject(key:String) -> AnyObject
{
    let pref = NSUserDefaults.standardUserDefaults()
    return pref.objectForKey(key)!
}

0

Update für Swift 3

func setObject(value:AnyObject ,key:String)
{
    let pref = UserDefaults.standard
    pref.set(value, forKey: key)
    pref.synchronize()
}

func getObject(key:String) -> AnyObject
{
    let pref = UserDefaults.standard
    return pref.object(forKey: key)! as AnyObject
}

0

In Swift 4.0.3 Xcode 9

============set  Data in UserDefaults =========

  UserDefaults.standard.set(userName, forKey: "userName")
  UserDefaults.standard.synchronize()

============Get Data in UserDefaults =========

  let userName = UserDefaults.standard.string(forKey: "userName")
  print(userName ?? "Gera")

  userNameTextField.text = ""+userName!
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.