[IOS 개발] NSArray, NSDictionary 데이터 저장
6209 단어 IOS 개발
1. 데이터를 저장할 경로를 새로 만듭니다.
2. 데이터를 해당 경로에 쓰기
기본 함수 소개:
①NSString * NSHomeDirectory ( void );
반환 값은 홈 디렉터리입니다.IOS에서 해당 해에 프로그램을 연 샌드박스의 홈 디렉토리를 나타냅니다.
②NSArray * NSSearchPathForDirectoriesInDomains ( NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde );
반환 값: 현재 디렉터리를 저장하는 문자열 그룹입니다.
첫 번째 매개변수 유형: NSSearchPathDirectory는 찾으려는 디렉토리를 나타냅니다.
https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/index.html#//apple_ref/doc/c_ref/NSSearchPathDirectory
두 번째 매개변수 유형: NSSearchPathDomainMask는 검색 범위를 지정하는 루트 디렉토리입니다.
[objc] view plain copy
enum {
NSUserDomainMask = 1,
NSLocalDomainMask = 2,
NSNetworkDomainMask = 4,
NSSystemDomainMask = 8,
NSAllDomainsMask = 0x0ffff ,
};
typedef NSUInteger NSSearchPathDomainMask;
세 번째 매개변수 유형: BOOL은 디렉토리의 물결 기호를 확장할지 여부를 나타냅니다. 일반적으로 YES입니다.
③-(NSString *)stringByAppendingPathComponent:(NSString *)
aString
이 함수는 문자열을 연결하는 데 사용되며 파일 경로에만 적용됩니다.
파일 이름이 "AyaseEli.plist"인 경우 해당 경로에 추가하면 다른 표현이 나타납니다.
"/tmp/"---------->/tmp/AyaseEli.plist
"/tmp"---------->/tmp/AyaseEli.plist
"/"---------->/AyaseEli.plist
""---------> AyaseEli.plist
④-(BOOL)writeToFile:(NSString *)
path
atomically:(BOOL) atomically
반환값: YES는 쓰기가 성공했음을 나타냅니다. 그렇지 않으면 NO입니다.
첫 번째 매개변수: (NSString*)
path ,path + 。
:(BOOL)atomically YES 。 , path 。 。
예: plist에 NSDictionary 및 NSArray 쓰기
[objc] view plain copy
/*
인터페이스에 버튼 2개 추가
1) NSArray 중 하나를 문서 디렉토리에 기록2) 문서 디렉토리에 NSDictionary 쓰기
파일에 쓰기 단계: 1.파일 경로 확인 2.파일에 컨텐츠 쓰기
그러나 plist 파일에 쓰기에는 데이터 형식에 제한이 있습니다: NSInteger, CGFloat, NSString, NSDate */
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button1 setFrame:CGRectMake(110, 100, 100, 40)];
[button1 setTitle:@ 배열 forState: UIControlStateNormal];
[button1 addTarget:self action:@selector(writeArray) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button1];
UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button2 setFrame:CGRectMake(110, 200, 100, 40)];
[button2 setTitle: @ 사전 forState: UIControlStateNormal];
[button2 addTarget:self action:@selector(writeDict) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button2];
}
#pragma mark - Actions
- (void)writeArray
{
NSLog(@ 쓰기 배열);
// 1.배열 정의 NSArray *array = @[@1, @2, @3, @4];
// 2.쓸 위치 결정 NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *doc = documents[0];
NSString *path = [doc stringByAppendingPathComponent:@"array.plist"];
NSLog(@"%@", doc);
// 3.쓰기 배열 [array writeToFile:path atomically:YES];
// 4.문자열 배열 쓰기 NSMutableArray *strArray = [NSMutableArray arrayWithCapacity:20];
for (NSInteger i = 0; i 20; i++) {
NSString *text = [NSString stringWithFormat:@"itcast-%d", arc4random_uniform(10000)];
[strArray addObject:text];
}
NSString *strPath = [doc stringByAppendingPathComponent:@"str.plist"];
[strArray writeToFile:strPath atomically:YES];
}
- (void)writeDict
{
NSLog(@ 사전 쓰기);
// 1.실례화 사전 NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSInteger i = 0; i 20; i++) {
NSString *keyName = [NSString stringWithFormat:@"key-%02d", i];
NSMutableArray *array = [NSMutableArray array];
NSInteger rnd = arc4random_uniform(10) + 5;
for (NSInteger j = 0; j
NSString *text = [NSString stringWithFormat:@"itcast-%d", arc4random_uniform(10000)];
[array addObject:text];
}
[dict setValue:array forKey:keyName];
}
// 2.파일 쓰기 NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [documents[0] stringByAppendingPathComponent:@"dict.plist"];
[dict writeToFile:path atomically:YES];
}