Lưu chuỗi vào NSUserDefaults?


Câu trả lời:


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

để lấy lại sau

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

1
Có cách nào để lưu chuỗi cơ sở này vào ngày cụ thể không? cảm ơn nhưng mã của bạn hoạt động giống như mã của tôi ngày anh ấy / cô ấy có thể viết một cái gì đó khác tích lũy cho đến ngày ngày
Mc.Lover

6
Vì một số lý do, phần tiết kiệm không hoạt động chính xác cho đến khi tôi gọi phương thức đồng bộ hóa. NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre

5
[[NSUserDefaults standardUserDefaults] đồng bộ hóa]; đang bị phản đối
Juan Boero

49

chính xác hơn

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

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

11
Không cần phải thực hiện kiểm tra nil cho standardUserDefaultsđối tượng. Hoàn toàn ổn khi gửi tin nhắn đến con số không trong Objective-C.
jbrennan

12
Nhưng quan trọng hơn là anh ấy đã bao gồm "đồng bộ hóa" - NSUserDefaults rất thất thường nếu bạn không gọi điều này!
PostCodeism

1
standardUserDefaults đồng bộ hóa đã sửa một số lỗi lạ cho tôi, cảm ơn!
Scott Roepnack

1
Tham chiếu nói về synchronizephương thức: "chỉ sử dụng phương pháp này nếu bạn không thể chờ đồng bộ hóa tự động (ví dụ: nếu ứng dụng của bạn sắp thoát)" - Tham khảo lớp NSUserDefaults
eliocs

@jbrennan Mặc dù nhận xét của bạn là đúng về mặt kỹ thuật, câu trả lời này rất hữu ích trong trường hợp bạn đang viết một cái gì đó quan trọng và muốn chắc chắn rằng nó đã được lưu thành công. Hơn nữa, trong vấn đề đó, sẽ tốt hơn nếu kiểm tra (thay vì bỏ qua) giá trị trả về của synchronize. Tài liệu nói: CÓ nếu dữ liệu được lưu thành công vào đĩa, nếu không thì KHÔNG.
Basil Bourque

31

Đây là cách làm tương tự với Swift;

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

Để lấy lại sau;

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

Trong Swift 3.0

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

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

}

Cảm ơn, vì câu hỏi ban đầu là dành cho swift, +1
Akshansh Thakur

Tôi gặp rắc rối với máy dò yếm thế sau bữa trưa. Câu hỏi ban đầu đã được hỏi vào năm 2010. Do đó, tôi đã nêu lên điều này vì Swift là con đường để đi ngày hôm nay.
Roy Falk

12

Một cái gì đó như thế này:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Sau đó để lấy:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

Bạn thực sự nên xem Tham khảo lớp NSUserDefaults của Apple và cũng có thể là hướng dẫn này: Hướng dẫn lập trình iPhone - Lưu / truy xuất dữ liệu bằng NSUserDefaults


12

Đừng quên tuyên bố này vì nếu không nó có thể không luôn luôn hoạt động:

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

Lấy

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


5

Một thực hành tốt cũng là sử dụng hằng số cho khóa để tránh các lỗi mà bạn không lưu trữ và đọc với cùng một khóa

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

Và gọi nó bằng cách:

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

Lấy chuỗi bằng cách sử dụng:

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

1

Lần đầu tiên xem

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

    }
     }

Hình ảnh

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

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

    [picker dismissViewControllerAnimated:YES completion:NULL];
     }
  • (IBAction) submitBton: (id) người gửi {

    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) người gửi {

      UIImagePickerContoder * picker = [[UIImagePickerControll
      alloc] init]; picker.delegate = tự; picker.allowsEditing = CÓ; picker.sourceType =
      UIImagePickerControllSourceTypePhotoL Library; [self PresentViewCont điều khiển: bộ chọn hoạt hình: hoàn thành CÓ: NULL];

      }


Chế độ xem thứ hai {NSMutableArray * mảng; }

- (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

Trong Swift5 và 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")

Lưu ý: Lưu dữ liệu văn bản (có nghĩa là Chuỗi, Mảng, Từ điển, v.v.) trong UserDefaults. Không lưu hình ảnh trong UserDefaults, không nên sử dụng (Lưu hình ảnh trong thư mục cục bộ).


0

Để tiết kiệm, hãy sử dụng:

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

Để Retriveing ​​sử dụng điều này:

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

0

Ở đây Đối với Swift tôi tạo hai chức năng gọi để lưu và lấy lại giá trị cho khóa từ Tùy chọn

có thể đây là sự giúp đỡ đầy đủ cho bạn

// để lưu đối tượng

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

cập nhật cho 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

Trong 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!
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.