2013년 7월 11일 목요일

.bundle 에 xib 넣기 / 런타임시 서버의 xib 불러오기

xib파일은 문자열로 이루어진 xml파일임이 분명하지만 그냥 사용하지 않네..그냥 써도 될텐데...

iOS 가 나오기 전부터 사용되던 nib파일로 자동 컴파일 된 후 사용된다

속도가 좀 더 빠르기야 하겠다만...그냥 쓰지 ㅎㅎ

그리고 .bundle 에 넣어진 파일들은 컴파일 되지 않는다

.bundle 에 xib파일을 넣고 뷰 컨트롤러로 로드하면 읽어지지 않는 이유가 바로 이것!!

터미널에서 ibtool "$xibFileName.xib" --compile "$xibFileName.nib" 이렇게 입력해서 nib파일을 만들어 .bundle에 넣어두면 뷰컨트롤러의 - (id)initWithNibName:bundle:  을 이용할 수 있다

컴파일된 nib파일을 서버에 올려두고 런타임시에 불러오는것도 가능할 것 같다


=====

내용 추가

=====

서버에 올려두고 런타임시 불러오는거...된다 ㅎㅎ

웹서버에 올려두고


#define AppDir [NSSearchPathForDirectoriesInDomains(NSCachesDirectory , NSUserDomainMask, YES) objectAtIndex:0]

NSURL *nibUrl = [NSURL URLWithString:@"http://myserver.domain/myxib.nib"];
NSData *data = [NSData dataWithContentsOfURL:nibUrl];
[data writeToFile:[NSString stringWithFormat:@"%@/%@",AppDir,@"myxib.nib"] atomically:YES];
NSBundle *bundle = [NSBundle bundleWithPath:AppDir];
NSString *nibName = @"myxib";
MyViewController *myViewController = [[MyViewController alloc]initWithNibName:nibName bundle:bundle];

요래 하면 잘 불러와진다

적당히 버전관리를 하거나

네트웍 접속 가능할때 항상 업데이트 시키거나 등등

적당히 응용하면 되겠다