iOS SDK: NSUserDefaults 사용
본 고 는 NSUserDefaults 클래스 를 사용 하여 프로그램 설정 을 저장 하고 변경 하 는 방법 을 보 여 줍 니 다.사용자 가 지정 한 그림 과 연락처 정 보 를 저장 하기 위해 연락처 프로그램 을 만 들 것 입 니 다.
NSUserDefaults 가 무엇 입 니까?
NSUserDefaults 클래스 는 프로그램 설정 과 속성, 사용자 데 이 터 를 저장 하 는 데 사 용 됩 니 다.예 를 들 어 사용자 가 프로그램 에서 사용 하 는 그림 이나 기본 색상 방안 을 저장 할 수 있 습 니 다.이 대상 들 은 iOS 의 이른바 'defaults 시스템' 에 저 장 됩 니 다.iOS 의 defaults 시스템 은 전체 app 에서 사용 할 수 있 기 때문에 defaults 시스템 에 저 장 된 데이터 도 전체 응용 프로그램의 수명 주기 에서 사용 할 수 있 습 니 다.사용자 가 프로그램 을 끄 든 끄 든 사용자 가 다시 프로그램 을 켜 거나 켜 면 이 데이터 가 여전히 존재 한 다 는 것 이다.NSUserDefaults 가 저장 할 수 있 는 데이터 형식 은 다음 과 같 습 니 다.
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 가 될 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.