[iOS] Canonical Mapping

iOS 2012.03.27 19:33
크리에이티브 커먼즈 라이선스
Creative Commons License

iOS에서 파일 경로를 읽어와서 DB의 정보와 비교하는 로직을 구현하다가 한참 삽질을 했습니다.

대략 이런 로직..


NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/"];

NSFileManager *fm = [NSFileManager defaultManager];

BOOL isDir = NO;

if ( [fm fileExistsAtPath:path isDirectory:&isDir] ) {

if ( isDir ) {

NSArray *ls = [fm contentsOfDirectoryAtPath:path error:nil];

for ( NSString *path in ls ) {

NSString *relativePath = [path substringFromIndex:[documentsPath length] + 1];

if ( [ isEqualToString:@"한글파일명.txt"] ) {

// 아 젠장.. 뭐가 잘못인데 여기로 안오냐..?

}

}

}

}


별 문제 없는 로직으로 생각했는데, 원하는 결과가 나오지 않더군요.

혹시 캐릭터셋 문제일지 몰라서 오만 캐릭터셋으로 변환해가면서 테스트 했지만 결과는 같았습니다.


문제는 Canonical Mapping 였습니다.

Canonical Mapping에 대한 내용은 http://johotogoshinentai.tistory.com/71 에서 참고하세요.

저는 배경지식이 부족해서 읽어봐도 전부 이해하지 못하겠네요 ㅠㅠ

결론 적으로 이야기 하면 <한글파일명.txt><ㅎㅏㄴㄱㅡㄹㅍㅏㅇㅣㄹㅁㅕㅇ.txt>로 처리가 되고 있다는 사실입니다.


NSLog 덕분에 더욱 한참 해멜수(?) 있었습니다.

NSLog로 relativePath 출력하면 정상적으로 출력이 되는 거죠.

혹시나 공백문자등이 따라오나 싶어서 NSLog(@">>%@<<", relativePath); 와 같이 출력했지만 이상 없이 잘 출력해주더군요.

NSData 타입으로 변형하여 Hex코드로 출력해야지만 겨우 다르다는 것을 인지 할 수 있습니다.


이런경우에 사용하라고 NSString에는 Canonical Mapping 적용/해제 해주는 메소드를 제공하고 있습니다.


- (NSString *)decomposedStringWithCanonicalMapping     // Canonical Mapping 적용

- (NSString *)precomposedStringWithCanonicalMapping    // Canonical Mapping 해제


예제 코드에 이를 적용하면 해결됩니다.


NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/"];

NSFileManager *fm = [NSFileManager defaultManager];

BOOL isDir = NO;

if ( [fm fileExistsAtPath:path isDirectory:&isDir] ) {

if ( isDir ) {

NSArray *ls = [fm contentsOfDirectoryAtPath:path error:nil];

for ( NSString *path in ls ) {

NSString *relativePath = [[path substringFromIndex:[documentsPath length] + 1precomposedStringWithCanonicalMapping];

if ( [ isEqualToString:@"한글파일명.txt"] ) {

// 오케이! 여기다 원하는 걸 넣어주자!

}

}

}

}



Apple | iPhone 4 | Normal program | Pattern | 1/15sec | F/2.8 | 3.9mm | ISO-400 | Off Compulsory | 2012:03:03 15:21:07




저작자 표시
신고

'iOS' 카테고리의 다른 글

iOS6 Smart App Banner  (0) 2013.08.06
iOS 앱에 Facebook Like 버튼 추가하기  (0) 2012.10.29
[iOS] Canonical Mapping  (1) 2012.03.27
Drawing with Quartz on iOS  (0) 2012.03.04
MonkSWF  (0) 2011.12.22
[iOS] shouldAutorotateToInterfaceOrientation 호출이 안되는 경우  (0) 2011.09.26
Posted by 지오아빠^^






티스토리 툴바