¿Guardar cadena en NSUserDefaults?

Respuestas:

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

para recuperarlo más tarde

NSString *savedValue = [[NSUserDefaults standardUserDefaults]
    stringForKey:@"preferenceName"];
dibujado hacia adelante
fuente
1
¿Hay alguna forma de guardar esta base de cadena en una fecha específica? gracias, pero su código funciona igual que el mío, creo una aplicación de calendario personalizada en la que el usuario puede escribir sus notas en ella, por ejemplo, el 3 de febrero el usuario escribe algo y este texto debe guardarse el 3 de febrero, y cuando el usuario se mueva a otro días que él / ella podría escribir algo más según la fecha del día del
deshielo
66
Por alguna razón, la parte de guardar no funcionó correctamente hasta que llamé al método de sincronización. NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre
55
[[NSUserDefaults standardUserDefaults] sincronizar]; se está quedando en desuso
Juan Boero
49

más precisamente

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

    if (standardUserDefaults) {
        [standardUserDefaults setObject:myString forKey:@"timestamps"];
        [standardUserDefaults synchronize];
    }
}
Mihir Mehta
fuente
11
No es necesario realizar la comprobación nula para el standardUserDefaultsobjeto. Está perfectamente bien enviar mensajes a cero en Objective-C.
jbrennan
12
Pero lo más importante es que incluyó "sincronizar": ¡NSUserDefaults es muy errático si no llama a esto!
PostCodeism
1
StandardUserDefaults sincronizar solucionó algunos errores extraños para mí, ¡gracias!
Scott Roepnack
1
La referencia habla sobre el synchronizemétodo: "use este método solo si no puede esperar la sincronización automática (por ejemplo, si su aplicación está a punto de salir)" - Referencia de clase
NSUserDefaults
@jbrennan Si bien su comentario es técnicamente correcto, esta respuesta es útil en caso de que esté escribiendo algo importante y quiera asegurarse de que se haya guardado correctamente. Además, en ese sentido, sería bueno probar (en lugar de ignorar) el valor de retorno de synchronize. El documento dice: SÍ si los datos se guardaron correctamente en el disco, de lo contrario NO.
Basil Bourque
31

Aquí se explica cómo hacer lo mismo con Swift;

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

Para recuperarlo más tarde;

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

En Swift 3.0

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

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

}
Ε Г И І И О
fuente
Gracias, ya que la pregunta original era rápida, +1
Akshansh Thakur
Tengo problemas con mi detector de cinismo después del almuerzo. La pregunta original se hizo en 2010. Por lo tanto, he votado a favor de esto, ya que Swift es el camino a seguir hoy.
Roy Falk
12

Algo como esto:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Luego para recuperar:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Realmente deberías consultar la referencia de clase NSUserDefaults de Apple y también quizás este tutorial: Tutorial de programación de iPhone: guardar / recuperar datos usando NSUserDefaults

v01d
fuente
12

No olvides esta declaración porque de lo contrario no siempre funciona:

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

Recuperando

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
fuente
6

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

Raviprakash
fuente
5

Una buena práctica es también usar una constante para la clave para evitar errores donde no se almacena y lee con la misma clave

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

Y llámalo por:

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

Recupere la cadena usando:

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

Primera vista

    {
    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) remitente {

    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) remitente {

      UIImagePickerController * picker = [[UIImagePickerController
      alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType =
      UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController: selector animado: SI finalización: NULL];

      }


segunda vista {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
fuente
1

En Swift5 y 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")

Nota: Guarde datos de texto (significa cadena, matriz, diccionario, etc.) en UserDefaults. No guarde imágenes en UserDefaults, no se recomienda (Guardar imágenes en el directorio local).

iOS
fuente
0

Para guardar use esto:

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

Para recuperar, use esto:

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

Aquí, para Swift, creo dos funciones que requieren guardar y recuperar el valor de la clave desde Preferencia

puede ser esta es una ayuda completa para ti

// para guardar el objeto

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
fuente
0

actualización para 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
fuente
0

En 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
fuente