'Plist(XML)'에 해당되는 글 1건

  1. 2010.06.24 iPhone NSDictionary 와 Array 와 Plist(XML) 파일의 구조
아이폰어플개발정보2010. 6. 24. 14:21
iPhone NSDictionary 와 Array 와 Plist(XML) 파일의 구조
키-밸류 코딩이라 하여 "Key=Value" 형태의 자료구조를 이용하는 개발방식인데,
델파이에서 TStringlist 정도의 편리함을 생각하면 되겠다.

그런데 이게 XML 파일과도 연계가 되어서 사용이 된다. 음.. 잠깐, 그런데 "Key=Value" 형태라고 하면
1대1 대칭자료형 아니냐? 그런데 1대N 형태의 자료구조도 가능하다는 얘기를 하고 싶은거다.

Key 는 보통 String 형으로 많이 사용한다. Value 역시 마찬가지지, 주로 프로퍼티 파일을 읽거나 쓸때 자주 쓰는데,
Value 를 단순 String 값이 아니라  String 들의 배열로 다룰 수가 있다. 아래 두가지 XML 파일이 있다. 이건 Plist 라는 iPhone 개발시에
주로 Property 파일로 활용되는 파일이다.

우선 1:1 방식인 경우

봐봐, 그냥 <key> 와 <string> 이다. 이런 경우에 값을 읽기 위해서는

iPhone 의 Document 폴더 밑에 있는 특정 "plist" 파일을 NSDictionary 로 읽어서 반환하는 메소드다.
- (NSDictionary *)readPlistFile:(NSString *)pFilepath {
    NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
                                                              NSDocumentDirectory,
                                                              NSUserDomainMask,
                                                              YES);
    NSString *docDir = [arrayPaths objectAtIndex:0];   
    NSString *filePath = [[NSString alloc] initWithFormat:@"%@/%@", docDir, pFilepath];   
    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
    return dic;
}

바이너리의 번들형태로 배포된 plist 파일을 읽을때는 이렇게 한다.

NSBundle* bundle = [NSBundlemainBundle];

NSString* plistPath = [bundle pathForResource:@"coordinates"ofType:@"plist"];

NSDictionary *dict = [NSDictionarydictionaryWithContentsOfFile:plistPath];


추가로 NSDictionary 로부터 모든 키들을 NSArray 로 뽑을때 정렬된 상태로 읽으려면

NSArray *array = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];


가져온 NSDictionary 로부터 1:1 매칭의 자료를 쓰는건 매우 쉽다.
NSString *strKey = [[dict allKeys] objectAtIndex:index];
해당 index 에 존재하는 Key 를 가져온다. 그럼 그 key 에 해당하는 value 를 가져오려면
NSString *strValue = [dict objectForKey:"key"];

자, 이젠 1:1 이 아닌 1:N 인 경우를 보자. plist 파일의 구조는 아래와 같다.

이건 똑같다. 똑같다는게 무슨 말이냐면, value 를 받을때 array 로 받는다고 생각하면 끝 ㅡㅡ;;
코드 예는 이렇다.
NSArray *array = [dict objectForKey:@"A"];



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

댓글을 달아 주세요