NSUserDefaults에 문자열을 저장 하시겠습니까?


답변:


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

나중에 다시 가져 오려면

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

1
특정 날짜 에이 문자열을 저장하는 방법이 있습니까? 고마워하지만 코드는 내 것과 동일하게 작동합니다. 예를 들어 사용자가 메모를 작성할 수있는 사용자 정의 캘린더 응용 프로그램을 만듭니다. 예를 들어 2 월 3 일에 사용자가 무언가를 쓰고이 텍스트를 2 월 3 일에 저장해야하며 다른 곳으로 이동할 때 그 / 그녀는 그 날 날짜에 발생하는 다른 것을 쓸 수있었습니다
Mc.Lover

6
어떤 이유로 든 동기화 메서드를 호출 할 때까지 저장 부분이 제대로 작동하지 않았습니다. NSString *valueToSave = @"someValue";[[NSUserDefaults standardUserDefaults]setObject:valueToSave forKey:@"preferenceName"]; [[NSUserDefaults standardUserDefaults]synchronize
fs_tigre 2019

5
[[NSUserDefaults standardUserDefaults] 동기화]; 더 이상 사용되지 않음
Juan Boero

49

더 정확하게

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

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

11
standardUserDefaults객체에 대한 무 검사를 수행 할 필요가 없습니다 . Objective-C에서 nil로 메시지를 보내는 것은 완벽합니다.
jbrennan

12
그러나 더 중요한 것은 "동기화"를 포함했습니다. NSUserDefaults는 이것을 호출하지 않으면 매우 불규칙합니다!
PostCodeism

1
standardUserDefaults가 동기화되어 이상한 버그를 수정했습니다. 감사합니다!
Scott Roepnack

1
참조는 그 synchronize방법 에 대해 말합니다 : "자동 동기화를 기다릴 수없는 경우에만이 방법을 사용하십시오 (예를 들어, 응용 프로그램을 종료하려고하는 경우)"- NSUserDefaults Class Reference
eliocs

@jbrennan 귀하의 의견은 기술적으로 정확하지만, 중요한 답변을 작성하고 성공적으로 저장되었는지 확인하려는 경우에 도움이됩니다. 또한 이와 관련하여의 반환 값을 테스트 (무시하기보다는)하는 것이 좋습니다 synchronize. 의사가 말합니다 : 데이터가 디스크에 성공적으로 저장되면 YES, 그렇지 않으면 NO.
Basil Bourque

31

Swift와 동일한 작업을 수행하는 방법은 다음과 같습니다.

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

나중에 다시 가져 오려면

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

스위프트 3.0

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

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

}

감사합니다. 최초의 질문은 신속 함을위한 것이 었
으므로

점심 식사 후 냉소 감지기에 문제가 있습니다. 원래 질문은 2010 년에 요청되었습니다. 따라서 Swift가 오늘가는 길이 기 때문에이를 상향 조정했습니다.
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"];

Apple의 NSUserDefaults 클래스 레퍼런스와이 튜토리얼을 확인하십시오 : iPhone Programming Tutorial – 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) 제출 Bton : (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) 선택 Img : (id) 보낸 사람 {

      UIImagePickerController * picker = [[UIImagePickerController
      alloc] init]; picker.delegate = 자기; picker.allowsEditing = 예; picker.sourceType =
      UIImagePickerControllerSourceTypePhotoLibrary; [self 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 와 엑스 코드 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")

참고 : 텍스트 데이터 (문자열, 배열, 사전 등을 의미)를 UserDefaults에 저장하십시오. UserDefaults에 이미지를 저장하지 말고 권장하지 않습니다 (이미지를 로컬 디렉토리에 저장).


0

저장하려면 다음을 사용하십시오.

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

검색하려면 다음을 사용하십시오.

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

0

스위프트의 경우 기본 설정에서 키의 값을 저장하고 검색하는 두 가지 함수를 만듭니다.

이것은 당신을 위해 전체 도움이 될 수 있습니다

// 객체 저장

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

스위프트 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.