아이폰어플개발정보2010. 6. 24. 14:22
iPhone SDK Tutorial 데이터 읽고 쓰기
파일을 읽고 쓰기...?
어떤 프로그래밍에서든 빠질 수 없는 부분이다.

예상대로 XML 형태의 데이터값들을 저장하고 읽는 방식으로 제공되고 있다.
바이너리라면 Base64 인코딩해서 XML 에 넣어야 할걸 ^^;;
일단 파일의 경로를 구하는 방법이다.
이걸 절대경로를 이용하는 방법은 절대 비추이다. 샌드박스의 절대경로를 알 수도 없을 것이다.
백북에서 시뮬레이터로 작업할 때 생기는 경로는 
/Users/nshc/Library/Application Support/iPhone Simulator/User/Applications 이다.

- (NSString *)dataFilepath {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

return [documentsDirectory stringByAppendingPathComponent:@"data.plist"];

}


위 메소드를 통해서 파일 경로를 구하거나 지정하고 ^^;;; 아래 메소드는 읽는 부분이 되겠다.


- (void)viewDidLoad {

NSString *filePath = [self dataFilepath];

if ([[NSFileManagerdefaultManager] fileExistsAtPath:filePath]) {

NSArray *array = [[NSArrayalloc] initWithContentsOfFile:filePath];

//NSLog(@"파일값: %@", [array objectAtIndex:0]);

[array release];

} else {

//NSLog(@"파일없음 data.plist");

}

    [superviewDidLoad];

}


보면 알겠지만 array 를 이용하고 있는데 이 array 라는 녀석이 만능이다.

맥환경에서의 설정파일은 XML 형태를 이용하는 plist 파일이 일반적인데, 이 파일을 array 형태로 읽고 쓰기가 가능하다.

쓰기는 어떻게 할까?


- (void)saveData:(NSString *)pValue {

NSMutableArray *array = [[NSMutableArrayalloc] init];

[array addObject:pValue];

[array writeToFile:[self dataFilepath] atomically:YES];

[array release];

//NSLog(@"파일저장완료");

}


어때? 이 심플함이 매력이다. array 가 writeToFile 메소드를 제공하고 있다규~ 오예~!!

실은 이 파일의 내용은 어플이 마지막으로 실행된 정보를 저장하거나 읽기 위해 기록한 데이터인데..


마지막으로..

array 객체가 아닌 키-밸류 형태의 데이터 저장과 읽기 방법은 NSDictionary 객체를 이용하는데 방법은 아래와 같다.

- (void)readPlist
{
    NSString *filePath = @"/System/Library/CoreServices/SystemVersion.plist";
        NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

        NSString *value;
        value = [plistDict objectForKey:@"ProductVersion"];
}

위에께 읽기 메소드고 쓰기는

- (void)writeToPlist
{
    NSString *filePath = @"/System/Library/CoreServices/SystemVersion.plist";
        NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

        [plistDict setValue:@"1.1.1" forKey:@"ProductVersion"];
        [plistDict writeToFile:filePath atomically: YES];

}



출처 : http://blog.naver.com/PostView.nhn?blogId=suny4rang&logNo=50081533054
Posted by 오늘마감

댓글을 달아 주세요