리소스에있는 디비 파일은 읽기 전용이므로 Documents 폴더로 최초에 복사해서 사용하는것이 정석!
그래서 보통 아래와 같은 코드로 프로그램 시작시에 체크하거나 최초 1회에 체크하여 복사하도록 하고있는데...
- (BOOL) copyDatabaseIfNeed {NSString *myPath = [DOCSFOLDER stringByAppendingPathComponent:@"mydb.db"];// DB파일 존재 여부 확인NSFileManager *fileManager = [NSFileManager defaultManager];BOOL exist = [fileManager fileExistsAtPath:myPath];if(exist) return TRUE;// DB가 없으면 복사해줌NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydb.db"];NSError *error;return [fileManager copyItemAtPath:defaultDBPath toPath:myPath error:&error];}
갑자기 언제부터인가 디비 파일이 0바이트로 복사가 되는 것이 아닌가..
이건 무슨일?
한참을 해매었는데.. 알고보니 위의 메소드를 AppDelegate 클래스의
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
요 메소드에 넣어주었는데...
요놈이 - (id) initWithCoder:(NSCoder *)aDecoder 이놈보다 더 늦게 실행된다는데 문제가 있었다.
- (id) initWithCoder:(NSCoder *)aDecoder 요놈은 xib를 초기화할 때 불리우는 메소드 인데..
지금 만들고 있는 앱의 탭바를 xib로 디자인 하고 각 탭중 한 탭의 클래스에서 저 메소드 안에 디비 사용 루틴을 넣었더니..
디비 파일을 복사하기도 전에 사용하게 되는 꼴이 됐고...
그렇다면 FMDB에서 에러를 던져야지..그걸 파일을 만들고 앉았으니... 이런..낭패가..
어쨋든 initWithCoder는 조심히 써야겠다!
'Work > iOS' 카테고리의 다른 글
XCode 제거하기 (0) | 2010.07.12 |
---|---|
UIWebView에 로컬 리소스 imgage 보이기 (0) | 2010.07.01 |
XP에서 iphone 개발하기 (2) | 2009.10.13 |
ipod touch에 navigation bar를 달아보자. (2) | 2008.04.01 |
안녕? 코코아야~ Ipod touch에 한글을 찍어보자 (2) | 2008.03.31 |