키-밸류 코딩이라 하여 "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:)];
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 |