iOS SDK: NSUserDefaults 사용

원문:http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/
본 고 는 NSUserDefaults 클래스 를 사용 하여 프로그램 설정 을 저장 하고 변경 하 는 방법 을 보 여 줍 니 다.사용자 가 지정 한 그림 과 연락처 정 보 를 저장 하기 위해 연락처 프로그램 을 만 들 것 입 니 다.
NSUserDefaults 가 무엇 입 니까?
NSUserDefaults 클래스 는 프로그램 설정 과 속성, 사용자 데 이 터 를 저장 하 는 데 사 용 됩 니 다.예 를 들 어 사용자 가 프로그램 에서 사용 하 는 그림 이나 기본 색상 방안 을 저장 할 수 있 습 니 다.이 대상 들 은 iOS 의 이른바 'defaults 시스템' 에 저 장 됩 니 다.iOS 의 defaults 시스템 은 전체 app 에서 사용 할 수 있 기 때문에 defaults 시스템 에 저 장 된 데이터 도 전체 응용 프로그램의 수명 주기 에서 사용 할 수 있 습 니 다.사용자 가 프로그램 을 끄 든 끄 든 사용자 가 다시 프로그램 을 켜 거나 켜 면 이 데이터 가 여전히 존재 한 다 는 것 이다.NSUserDefaults 가 저장 할 수 있 는 데이터 형식 은 다음 과 같 습 니 다.
  • NSData
  • NSString
  • NSNumber
  • NSDate
  • NSArray
  • NSDictionary

  • UIImage 와 같은 다른 종 류 를 저장 하려 면 인 코딩 (즉 archive) 을 하거나 NSData, NSNumber 또는 NSString 으로 변환 해 야 합 니 다.
    이제 우 리 는 간단 한 demo 를 통 해 defaults 시스템 을 어떻게 사용 하 는 지 배 울 것 입 니 다.
    1 단계: 프로젝트 생 성
     
    새 항목.View - based Application 을 선택 하고 Next 를 누 르 십시오.항목 이름 연락처 입력.회사 표 지 를 입력 하고 Device Family 는 iPhone 을 선택 합 니 다.Next 를 클릭 합 니 다.파일 저장 위 치 를 선택 하고 Create 를 누 르 십시오.
     
    STEP 2: 디자인 인터페이스
    ProjectNavigator 의 Contact 폴 더 에서 ContactView Controller. xib 를 선택 하 십시오.그림% 1 개의 캡 션 을 편 집 했 습 니 다.UIImageView 하나 와 RoundRect Button 2 개 를 끌 어 옵 니 다.
    첫 번 째 TextField 를 선택 하고 Place holder 를 First Name 으로 설정 합 니 다.두 번 째 TextField 의 Place holder 를 Last Name 으로 설정 합 니 다.세 번 째 TextField 의 Place holder 를 Age 로 설정 하고, keyboardtype 을 Number Pad 로 설정 합 니 다.
    첫 번 째 단추 의 text 는 Save 로, 두 번 째 단추 의 text 는 Choose Image 로 설정 합 니 다.
    그림.
    이제 연결 을 만 듭 니 다.Editor 중간 단 추 를 누 르 면 Assistanteditor 를 표시 합 니 다.
    first name 텍스트 상 자 를 선택 하고 오른쪽 키 (CTRL + 왼쪽 키) 를 interface 성명 부분 에 끌 어 다 놓 으 면 팝 업 창 이 나타 납 니 다. name 에 firstNameTextField 를 입력 하고 connect 를 누 르 십시오.그림.
    Lastname, Age 텍스트 상자, UIImageView 에 같은 방식 으로 연결 을 만 듭 니 다. 각각 lastNameTextField, ageTextField, contactImageView 입 니 다.
    버튼 에 대해 서 는 아웃 렛 이 아 닌 액 션 을 만들어 야 합 니 다.저장 단 추 를 오른쪽 단추 로 누 르 면 인터페이스 설명 부분 으로 선 을 끌 지만, 이번 에는 괄호 밖으로 끌 어야 합 니 다.Connection 을 Action (Outlet 이 아 닌) 으로 바 꾸 고 name 에 save 를 입력 하 십시오.마찬가지 로 ChooseImage 단 추 를 위해 Action 연결 을 만 들 고 name 은 chooseImage 입 니 다.현재 ContactViewController. h 코드 는 다음 과 같 습 니 다.
     
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 #import <UIKit/UIKit.h>   @interface   ContactViewController : UIViewController {       IBOutlet   UIImageView *contactImageView;     IBOutlet   UITextField *firstNameTextField;     IBOutlet   UITextField *lastNameTextField;     IBOutlet   UITextField *ageTextField; }   - (IBAction)save:(id)sender; - (IBAction)chooseImage:(id)sender;   @end
    다음은 Build and Run 을 클릭 합 니 다.텍스트 를 입력 하고 프로그램 을 종료 합 니 다.프로그램 을 다시 열 면 입력 한 텍스트 가 여전히 존재 하 는 것 을 발견 할 수 있 습 니 다.이것 은 iOS 의 '다 중 태 스 크' 특성 에 불과 하 다.여러 작업 표시 줄 에서 프로그램 아이콘 을 삭제 하고 프로그램 을 다시 시작 하면 입력 한 텍스트 가 보이 지 않 습 니 다.본 논문 에서 저 희 는 NSUserDefaults 를 사용 하여 입력 한 정 보 를 저장 할 것 입 니 다. 설령 당신 이 프로그램 을 종료 하 더 라 도.이 데 이 터 는 여러 세 션 에 존재 할 수 있 습 니 다.
    STEP 3: 그림 고 르 기
    더 많은 공간 을 방출 하기 위해 standard Editor 모드 를 되 돌려 줍 니 다.ContactViewController. h 를 열 고 UIImagePickerController Delegate 와 UINavigationController Delegate 프로 토 콜 을 추가 합 니 다.
     
    1 <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
    ContactViewController. m 을 열 고 choose Image: 방법 에 코드 를 추가 합 니 다.
    1 2 3 4 5 6 7 8 - (IBAction)chooseImage:(id)sender {     UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease];     picker.delegate = self;     picker.allowsEditing = YES;     picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;     [self   presentModalViewController:picker animated:YES]; }
    우선, UIImagePickerController 를 만 든 다음 delegate 를 self 로 설정 합 니 다.그리고 '사용자 편집 허용' 속성 을 YES 로 설정 하고 UIImagePickerController 의 원본 형식 을 사진 라 이브 러 리 로 설정 합 니 다.마지막 으로 UIImagePickerController 를 팝 업 합 니 다.
    다음은 imagepicker 의 의뢰 방법 을 실현 해 야 합 니 다.
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 #pragma mark - Image Picker Delegate   - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary   *)editingInfo {     contactImageView.image = image;       [picker dismissModalViewControllerAnimated:YES]; }   - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {       [picker dismissModalViewControllerAnimated:YES]; }
    첫 번 째 방법 은 contactImageView 의 image 속성 을 사용자 가 선택 한 그림 으로 설정 하고 UIImageView Controller 를 해체 합 니 다.두 번 째 방법 은 UIImageViewController 를 해체 하 는 것 입 니 다.
    4 단계: 데이터 저장
    텍스트 저장 은 setObject: forKey 방법 을 사용 합 니 다.key 는 저 장 된 텍스트 의 색인 키 를 지정 합 니 다. 데 이 터 를 꺼 낼 때 이 색인 키 로 검색 합 니 다.정 수 를 저장 하려 면 setInteger: forKey 방법 을 사용 하 십시오.그림 저장 에 NSData 인 스 턴 스 를 만들어 야 합 니 다.
    save 방법 은 다음 과 같이 수정 합 니 다.
     
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 - (IBAction)save:(id)sender {     // Hide the keyboard     [firstNameTextField resignFirstResponder];     [lastNameTextField resignFirstResponder];     [ageTextField resignFirstResponder];       // Create strings and integer to store the text info     NSString   *firstName = [firstNameTextField text];     NSString   *lastName  = [lastNameTextField text];     int   age = [[ageTextField text] integerValue];       // Create instances of NSData     UIImage *contactImage = contactImageView.image;     NSData   *imageData = UIImageJPEGRepresentation(contactImage, 100);       // Store the data     NSUserDefaults   *defaults = [NSUserDefaults   standardUserDefaults];       [defaults setObject:firstName forKey:@"firstName"];     [defaults setObject:lastName forKey:@"lastname"];     [defaults setInteger:age forKey:@"age"];     [defaults setObject:imageData forKey:@"image"];       [defaults synchronize];       NSLog(@"Data saved"); }
    우선 키 보드 를 풀 겠 습 니 다.그리고 사용자 가 입력 한 Firstname 과 Last name 텍스트 를 임시로 저장 할 NSString 을 만 듭 니 다.사용자 Age 텍스트 를 int 로 저장 합 니 다.contactImageView 의 image 에 대해 서 는 NSUserDefaults 대상 에 UIImage 를 직접 저장 할 수 없 기 때문에 NSData 로 만 저장 할 수 있 습 니 다.그리고 NSUserDefaults 대상 에 데 이 터 를 넣 습 니 다.마지막 으로 저 희 는 synchronize 방법 으로 데 이 터 를 standard UserDefaults 데이터베이스 에 오래 지속 합 니 다.
     
    5 단계: 데이터 읽 기
    결국 우 리 는 방금 저 장 된 데 이 터 를 읽 어야 한다.viewdLoad 방법 은 프로그램 이 시 작 될 때 호출 되 기 때문에 이 방법 에서 진행 하 는 것 을 선택 하 였 습 니 다.viewdLoad 방법 에서 우 리 는 다음 과 같은 코드 로 수정 합 니 다.
     
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - (void)viewDidLoad {     // Get the stored data before the view loads     NSUserDefaults   *defaults = [NSUserDefaults   standardUserDefaults];       NSString   *firstName = [defaults objectForKey:@"firstName"];     NSString   *lastName = [defaults objectForKey:@"lastname"];       int   age = [defaults integerForKey:@"age"];     NSString   *ageString = [NSString   stringWithFormat:@"%i",age];       NSData   *imageData = [defaults dataForKey:@"image"];     UIImage *contactImage = [UIImage imageWithData:imageData];       // Update the UI elements with the saved data     firstNameTextField.text = firstName;     lastNameTextField.text = lastName;     ageTextField.text = ageString;     contactImageView.image = contactImage;       [super   viewDidLoad]; }
    우선, 저 희 는 standard UserDefaults 방법 을 호출 하여 NSUserDefaults 를 얻 었 습 니 다.우 리 는 First name 과 Last name 을 NSString 에 읽 었 다.Age 는 정수 이기 때문에 문자열 로 바 꿉 니 다. textField 의 text 속성 에 int 를 직접 할당 할 수 없 기 때 문 입 니 다.우 리 는 image 대상 을 NSData 대상 에 읽 은 후에 NSData 로 UIImage 를 만 듭 니 다.마지막 으로 읽 은 데이터 로 UI 컨트롤 의 디 스 플레이 내용 을 업데이트 합 니 다.전체 프로그램 이 만 들 어 졌 습 니 다. Build and Run 을 다시 클릭 하 십시오.정 보 를 입력 하고 그림 을 선택 하 십시오.다 중 작업 표시 줄 에서 프로그램 을 닫 고 다시 열 면 모든 데이터 가 다시 표 시 됩 니 다.만약 모든 것 이 정상 이 라면, 우리 의 demo 프로그램 은 OK 가 될 것 이다.

    좋은 웹페이지 즐겨찾기