Enregistrer la chaîne dans NSUserDefaults?

Réponses:

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

pour le récupérer plus tard

NSString *savedValue = [[NSUserDefaults standardUserDefaults]
    stringForKey:@"preferenceName"];
dessiné
la source
1
Existe-t-il un moyen de sauvegarder cette base de chaînes à une date spécifique? merci mais votre code fonctionne comme le mien, je crée une application de calendrier personnalisée où l'utilisateur peut y écrire ses notes, par exemple en 3 février l'utilisateur écrit quelque chose et ce texte doit être enregistré le 3 février, et lorsque l'utilisateur passe à l'autre jours où il / elle pourrait écrire autre chose accumulé jusqu'à la date du jour
Mc.Lover
6
Pour une raison quelconque, la partie d'enregistrement n'a pas fonctionné correctement jusqu'à ce que j'appelle la méthode de synchronisation. NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre
5
[[NSUserDefaults standardUserDefaults] synchroniser]; devient obsolète
Juan Boero
49

plus précisément

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

    if (standardUserDefaults) {
        [standardUserDefaults setObject:myString forKey:@"timestamps"];
        [standardUserDefaults synchronize];
    }
}
Mihir Mehta
la source
11
Il n'est pas nécessaire d'effectuer la vérification nulle de l' standardUserDefaultsobjet. Il est parfaitement possible d'envoyer des messages à zéro dans Objective-C.
jbrennan
12
Mais plus important encore, il a inclus "synchroniser" - NSUserDefaults est très erratique si vous n'appelez pas cela!
PostCodeism
1
standardUserDefaults synchronize a corrigé quelques bugs étranges pour moi, merci!
Scott Roepnack
1
La référence parle de la synchronizeméthode: "utilisez cette méthode uniquement si vous ne pouvez pas attendre la synchronisation automatique (par exemple, si votre application est sur le point de quitter)" - NSUserDefaults Class Reference
eliocs
@jbrennan Bien que votre commentaire soit techniquement correct, cette réponse est utile au cas où vous écrivez quelque chose d'important et que vous voulez être sûr qu'il a été enregistré avec succès. De plus, à cet égard, il serait bon de tester (plutôt que d'ignorer) la valeur de retour de synchronize. Le document dit: OUI si les données ont été enregistrées avec succès sur le disque, sinon NON.
Basil Bourque
31

Voici comment faire de même avec Swift;

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

Pour le récupérer plus tard;

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

Dans Swift 3.0

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

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

}
Ε Г И І И О
la source
Merci, puisque la question d'origine était pour swift, +1
Akshansh Thakur
J'ai des problèmes avec mon détecteur de cynisme après le déjeuner. La question initiale a été posée en 2010. J'ai donc voté en faveur de cela car Swift est la voie à suivre aujourd'hui.
Roy Falk
12

Quelque chose comme ça:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Puis récupérer:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Vous devriez vraiment consulter la référence de classe NSUserDefaults d'Apple et peut-être aussi ce tutoriel: Tutoriel de programmation iPhone - Enregistrement / récupération de données à l'aide de NSUserDefaults

v01d
la source
12

N'oubliez pas cette déclaration car sinon elle ne fonctionnera pas toujours:

[standardUserDefaults synchronize];
Walter Schurter
la source
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];

Récupération

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
la source
6

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

Raviprakash
la source
5

Une bonne pratique consiste également à utiliser une constante pour la clé afin d'éviter les bogues où vous ne stockez pas et ne lisez pas avec la même clé

NSString* const TIME_STAMPS_KEY = @"TIME_STAMPS_KEY";
Sunkas
la source
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];
    }
}

Et appelez-le par:

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

Récupérez la chaîne en utilisant:

NSString * stored_string = [[NSUserDefaults standardUserDefaults] stringforkey:key_for_the_String]
bharathi kumar
la source
1

FirstView

    {
    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) expéditeur {

    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) chooseImg: (id) sender {

      UIImagePickerController * picker = [[UIImagePickerController
      alloc] init]; picker.delegate = self; picker.allowsEditing = OUI; picker.sourceType =
      UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController: sélecteur animé: OUI complétion: NULL];

      }


deuxième vue {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
la source
1

Dans Swift5 et 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")

Remarque: Enregistrez les données de texte (signifie chaîne, tableau, dictionnaire, etc.) dans UserDefaults. N'enregistrez pas d'images dans UserDefaults, ce n'est pas recommandé (Enregistrer les images dans le répertoire local).

iOS
la source
0

Pour économiser, utilisez ceci:

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

Pour Retriveing ​​utilisez ceci:

[[[NSUserDefaults standardUserDefaults]stringForKey:@"KTerminated"] isEqualToString:@"YES"];
Subbu
la source
0

Ici, pour Swift, je crée deux fonctions qui demandent une valeur de sauvegarde et de récupération pour la clé de préférence

peut-être que c'est une aide complète pour vous

// pour sauvegarder l'objet

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
la source
0

mise à jour pour 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
la source
0

Dans 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
la source