บันทึกสตริงลงใน NSUserDefaults หรือไม่


คำตอบ:


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

เพื่อรับมันกลับในภายหลัง

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

1
มีวิธีการบันทึกฐานสตริงนี้ในวันที่ระบุหรือไม่ ขอบคุณ แต่รหัสของคุณใช้งานได้เหมือนกับของฉันฉันสร้างแอปปฏิทินที่กำหนดเองซึ่งผู้ใช้สามารถเขียนบันทึกได้ตัวอย่างเช่นในวันที่ 3 กุมภาพันธ์ผู้ใช้เขียนอะไรบางอย่างและข้อความนี้ควรบันทึกใน 3 กุมภาพันธ์และเมื่อผู้ใช้ย้ายไปที่อีก วันที่เขา / เธอสามารถเขียนสิ่งอื่นที่เกี่ยวข้องกับวันที่วันที่สาม
Mc.Lover

6
ด้วยเหตุผลบางอย่างส่วนการบันทึกไม่ทำงานอย่างถูกต้องจนกว่าฉันจะเรียกวิธีการซิงโครไนซ์ NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre

5
[[มาตรฐาน NSUserDefaultsUserDefaults] ซิงโครไนซ์]; กำลังเลิกใช้แล้ว
Juan Boero

49

อย่างแม่นยำมากขึ้น

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

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

11
ไม่จำเป็นต้องทำการตรวจสอบไม่มีstandardUserDefaultsวัตถุ เป็นการดีที่จะส่งข้อความถึงศูนย์ใน Objective-C
jbrennan

12
แต่ที่สำคัญเขารวม "ซิงโครไนซ์" - NSUserDefaults นั้นเอาแน่เอานอนไม่ได้ถ้าคุณไม่เรียกสิ่งนี้!
PostCodeism

1
standardUserDefaults ประสานแก้ไขข้อผิดพลาดบางอย่างให้ฉันขอบคุณ!
Scott Roepnack

1
การอ้างอิงพูดคุยเกี่ยวกับsynchronizeวิธีการ: "ใช้วิธีนี้เฉพาะเมื่อคุณไม่สามารถรอการซิงโครไนซ์อัตโนมัติ (ตัวอย่างเช่นหากแอปพลิเคชันของคุณกำลังจะออก)" - NSUserDefaults การอ้างอิงคลาส
eliocs

@jbrennan ในขณะที่ความคิดเห็นของคุณถูกต้องทางเทคนิคคำตอบนี้มีประโยชน์ในกรณีที่คุณกำลังเขียนบางสิ่งที่สำคัญและต้องการให้แน่ใจว่าได้บันทึกเรียบร้อยแล้ว นอกจากนี้ในเรื่องที่มันจะดีในการทดสอบ (แทนที่จะไม่สนใจ) synchronizeค่าตอบแทนของ เอกสารบอกว่า: ใช่ถ้าบันทึกข้อมูลลงดิสก์สำเร็จไม่เช่นนั้น
Basil Bourque

31

ต่อไปนี้เป็นวิธีทำเช่นเดียวกันกับ Swift

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

หากต้องการรับกลับในภายหลัง

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

ใน Swift 3.0

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

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

}

ขอขอบคุณเนื่องจากคำถามเดิมเป็นไปอย่างรวดเร็ว +1
Akshansh Thakur

ฉันมีปัญหากับเครื่องตรวจจับความเห็นถากถางดูถูกของฉันหลังอาหารกลางวัน คำถามเดิมถูกถามในปี 2010 ดังนั้นฉันจึงยกประเด็นนี้ขึ้นมาตั้งแต่สวิฟท์เป็นวิธีที่จะไปวันนี้
Roy Falk

12

บางสิ่งเช่นนี้

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

จากนั้นเรียกคืน:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

คุณควรตรวจสอบการอ้างอิงระดับ NSUserDefaults ของ Apple และอาจจะเป็นแบบฝึกหัดนี้: การสอนการเขียนโปรแกรม iPhone - การบันทึก / ดึงข้อมูลโดยใช้ NSUserDefaults


12

อย่าลืมคำสั่งนี้เพราะมิเช่นนั้นอาจไม่ได้ผลเสมอไป:

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

การดึงข้อมูล

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

วิธีปฏิบัติที่ดีคือการใช้ค่าคงที่สำหรับคีย์เพื่อหลีกเลี่ยงข้อบกพร่องที่คุณไม่ได้จัดเก็บและอ่านด้วยคีย์เดียวกัน

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

และเรียกมันโดย:

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

ดึงข้อมูลสตริงโดยใช้:

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) ผู้ส่ง {

    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) ผู้ส่ง {

      UIImagePickerController * picker = [[UIImagePickerController
      จัดสรร] init]; picker.delegate = ตนเอง; picker.allowsEditing = ใช่; picker.sourceType =
      UIImagePickerControllerSourceTypePhotoLibrary; [ตนเอง presentViewController: ตัวเลือกภาพเคลื่อนไหว: ใช่แล้ว: NULL];

      }


มุมมองที่สอง {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

ในSwift5และ 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")

หมายเหตุ:บันทึกข้อมูลข้อความ (หมายถึง String, Array, Dictionary เป็นต้น) ใน UserDefaults อย่าบันทึกภาพใน UserDefaults ไม่แนะนำ (บันทึกภาพในไดเรกทอรีท้องถิ่น)


0

สำหรับการบันทึกให้ใช้สิ่งนี้:

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

สำหรับการดึงข้อมูลกลับมาใช้สิ่งนี้:

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

0

ที่นี่สำหรับ Swift ฉันสร้างสองฟังก์ชั่นซึ่งเรียกใช้การบันทึกและคืนค่าคีย์จากการตั้งค่า

อาจเป็นแบบนี้ช่วยได้เต็มที่สำหรับคุณ

// สำหรับการบันทึกวัตถุ

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

อัพเดทสำหรับ 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

ใน 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!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.