Programming/XML

iPhone NSDictionary 와 Array 와 Plist(XML) 파일의 구조

통통만두 2010. 6. 30. 15:44
반응형

키-밸류 코딩이라 하여 "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 = [NSBundle mainBundle];

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

NSDictionary *dict = [NSDictionary  dictionaryWithContentsOfFile: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"];
반응형

'Programming > XML' 카테고리의 다른 글

델파이에서 XMLDocument 컴포넌트로 XML 읽고 쓰기  (0) 2010.06.30
XML 문서 기본 구조  (0) 2010.06.30