본문 바로가기

개발도구/iOS - 아이폰 개발

[아이폰] NSUserDefaults - 간단한 데이터 저장 화면전환 값 넘기기, 딜리게이트 값 넘기기

예를들어 A.m/A.h 가 있고 B.m/B.h    가 있다면,

 

A.m에서는 어떠한 정보를 파싱해서 스트링에 저장을 하고

 

B.m에서는 A.m에 저장된 파싱값 (스트링)을 사용하려고 하는데요.

 

이떄 어떤 식으로 코딩을 해야 하나요??

 

노티피케이션, 딜리게이트 같은걸 사용하라고 하시는데 이해가 잘 되지 않아서;;

 

간단한 코드로 설명해주시면 감사하겠습니다.


답변 

NSNotificationCenter 를 이용해서 값을 직접 전달해 주어도 되고,
NSUserDefaults 에 값을 저장해두었다가 사용해도 되고,
Singleton 객체를 만들어서 값을 저장해두었다가 사용해도 됩니다..

각각의 키워드로 검색해 보시면 참고하실 자료가 많이 있습니다.


자주 사용하는 NSUserDefaults 에 관한 API

1. NSUserDefaults 에 데이터 저장


 (1) int 값 저장

[[NSUserDefaults standardUserDefaults] setInteger:<int value> forKey:<key value>];




 (2) bool 값 저장

[[NSUserDefaults standardUserDefaults] setBool:<bool value> forKey:<key value>];



 (3) object 저장

[[NSUserDefaults standardUserDefaults] setObject:<object> forKey:<key value>];




2. NSUserDefaults 에 저장된 데이터 읽기


 (1) int 값 읽기

int value = [[NSUserDefaults standardUserDefaults] integerForKey:<key value>];



 (2) bool 값 읽기

bool value = [[NSUserDefaults standardUserDefaults] boolForKey:<key value>];



 (3) NSString 값 읽기 (NSString 값 저장은 NSString 자체가 object이기 때문에 setObject를 이용하면 됩니다.)

NSString *value = [[NSUserDefaults standardUserDefaults] stringForKey:<key value>];



 (4) object 읽기

id value = [[NSUserDefaults standardUserDefaults] objectForKey:<key value>];



SQLite까지 사용할 필요가 없는 간단한 데이터를 다룰 때 좋은 방식이다. 예를 들어 앱을 껐다가 다시 켜도 기억해야 하는 작은 데이터, 게임 최고 점수라든가 사용자 아이디 같은 값을 저장할 때 유용하다.

저장하기

1
2
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"dateKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

이때 setObject는 setFloat, setInteger, setDouble등으로 대체 가능.

불러오기

1
2
NSDate *date =
(NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"dateKey"];

역시 objectForKey는 stringForKey, integerForKey등으로 대체 가능.

NSUserDefaults로 인해 생성되는 plist파일은
user/Application Support/iPhone Simulator/4.1/Application/XXXX/Library/Preferences/
에 생성된다. (실제 device라면 /Library/Preferences)

이 때 데이터를 불러올 때 Key에 해당하는 값이 없으면 return value는 nil이 된다.