Simpan string ke NSUserDefaults?


Jawaban:


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

untuk mendapatkannya kembali nanti

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

1
Apakah ada cara untuk menyimpan basis string ini pada tanggal tertentu? terima kasih tetapi kode Anda berfungsi sama seperti milik saya, saya membuat aplikasi kalender khusus yang pengguna dapat menulis catatan mereka di dalamnya, misalnya dalam 3 Februari pengguna menulis sesuatu dan teks ini harus disimpan dalam 3 Februari, dan ketika pengguna pindah ke yang lain hari dia bisa menulis hal lain yang
berkaitan dengan

6
Untuk beberapa alasan, bagian penyimpanan tidak berfungsi dengan baik sampai saya memanggil metode sinkronisasi. NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre

5
[[NSUserDefaults standardUserDefaults] sinkronisasi]; semakin ditinggalkan
Juan Boero

49

lebih tepatnya

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

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

11
Tidak perlu melakukan nil check untuk standardUserDefaultsobjek. Tidak apa-apa mengirim pesan ke nol di Objective-C.
jbrennan

12
Tetapi yang lebih penting dia memasukkan "sinkronisasi" - NSUserDefaults sangat tidak menentu jika Anda tidak menyebutnya!
PostCodeism

1
sinkronisasi standardUserDefaults memperbaiki beberapa bug aneh untuk saya, terima kasih!
Scott Roepnack

1
Referensi tersebut berbicara tentang synchronizemetode ini: "gunakan metode ini hanya jika Anda tidak dapat menunggu sinkronisasi otomatis (misalnya, jika aplikasi Anda akan keluar)" - NSUserDefaults Class Reference
eliocs

@jbrennan Sementara komentar Anda secara teknis benar, jawaban ini bermanfaat jika Anda menulis sesuatu yang penting dan ingin memastikan itu berhasil disimpan. Selain itu, dalam hal itu, akan lebih baik untuk menguji (daripada mengabaikan) nilai pengembalian synchronize. Doc mengatakan: YA jika data berhasil disimpan ke disk, jika tidak NO.
Basil Bourque

31

Inilah cara melakukan hal yang sama dengan Swift;

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

Untuk mendapatkannya kembali nanti;

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

Di Swift 3.0

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

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

}

Terima kasih, karena pertanyaan aslinya adalah untuk swift, +1
Akshansh Thakur

Saya mengalami masalah dengan detektor sinisme setelah makan siang. Pertanyaan asli ditanyakan pada tahun 2010. Karena itu saya memutuskan ini karena Swift adalah cara untuk pergi hari ini.
Roy Falk

12

Sesuatu seperti ini:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Kemudian untuk mengambil:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Anda harus benar-benar memeriksa Referensi Kelas NSUserDefaults Apple dan mungkin juga tutorial ini: Tutorial Pemrograman iPhone - Menyimpan / Mengambil Data Menggunakan NSUserDefaults


12

Jangan lupa pernyataan ini karena jika tidak, pernyataan ini mungkin tidak selalu berfungsi:

[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];

Mengambil

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

Praktik yang baik adalah menggunakan konstanta untuk kunci untuk menghindari bug di mana Anda tidak menyimpan dan membaca dengan kunci yang sama

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];
    }
}

Dan menyebutnya dengan:

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

Ambil kembali string dengan menggunakan:

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

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

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

      UIImagePickerController * picker = [[
      alokasi UIImagePickerController ] init]; picker.delegate = diri; picker.allowsEditing = YA; picker.sourceType =
      UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController: animasi pemilih: penyelesaian YES: NULL];

      }


Tampilan kedua {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

Di Swift5 dan 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")

Catatan: Simpan data teks (berarti String, Array, Kamus dll.) Di UserDefaults. Jangan menyimpan gambar di UserDefaults, itu tidak dianjurkan (Simpan gambar di direktori lokal).


0

Untuk menghemat gunakan ini:

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

Untuk Retriveing ​​gunakan ini:

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

0

Di sini Untuk Swift saya membuat dua fungsi yang memanggil untuk menyimpan dan mengambil kembali nilai untuk kunci dari Preferensi

Mungkin ini bantuan penuh untuk Anda

// untuk menyimpan objek

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

pembaruan untuk 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

Di 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!
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.