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"];
nach vorne gezogen
quelle
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];
    }
}
Mihir Mehta
quelle
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") {

}
Ε Г И І І И
quelle
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

v01d
quelle
12

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

[standardUserDefaults synchronize];
Walter Schurter
quelle
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"];
Vishnuvardhan Sadu
quelle
6

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

Raviprakash
quelle
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";
Sunkas
quelle
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]
Bharathi Kumar
quelle
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; }
Mithun R.
quelle
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).

iOS
quelle
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"];
Subbu
quelle
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)!
}
Sapana Ranipa
quelle
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
}
M1xelated
quelle
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!
Keshav Gera
quelle