원본 파일이 137KB인데도 Documents 디렉토리에 복사 한 후 크기가 0KB 인 .db 파일에 문제가 있습니다. SQLite Manager에서 복사 한 파일을 열려고했습니다. 열리면 파일 손상에 대해 불평하지 않습니다 ... 단지 하나의 테이블을 포함하지 않습니다.sqlite 파일을 Documents 폴더에 복사 한 후 파일이 비어졌습니다.
내 코드는 파일을 복사합니다 :
- (void) createEditableDatabase
{
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *writableDB = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"yc_ch.db"];
success = [fileManager fileExistsAtPath:writableDB];
if (success)
{
return;
}
NSString *defaultPath = [[NSBundle mainBundle] pathForResource:@"yc_ch" ofType:@"db"];
error = nil;
success = [fileManager copyItemAtPath:defaultPath toPath:writableDB error:&error];
if (!success)
{
NSAssert1(0, @"Failed to create writable database file:%@", [error localizedDescription]);
}
}
확인을 파일이 존재하는 경우, 복사되지 않은 경우. 검사는 RootViewController에서 발생합니다.
- (void)viewDidLoad
{
self.subCountriesArr=[[NSMutableArray alloc]initWithCapacity:1];
NSMutableArray *subCountriesTemp=[[[NSMutableArray alloc]init]autorelease];
DBAccess *dbAccess=[[DBAccess alloc]init];
[dbAccess createEditableDatabase]; //method to copy file
subCountriesTemp=[dbAccess getSubCountries];
[dbAccess closeDataBase];
[dbAccess release];
}
그래서 저에게는 이상합니다. 어떤 도움을 주시겠습니까? 미리 감사드립니다.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDB = [documentsDirectory stringByAppendingPathComponent:@"yc_ch.db"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:writableDB]) {
NSString *databaseFile = [[NSBundle mainBundle] pathForResource:@"yc_ch" ofType:@"db"];
[fileManager copyItemAtPath:databaseFile toPath:writableDB error:nil];
NSLog(@"database copied");
}
내가 NSHomeDirectory이 문서 디렉토리에 액세스하는 유효한 방법이라고 생각하지 않습니다 ....
이 경우 확실히 몰라 : 당신이 그것을 시도에 대해 어떻게
아니요, 도움이되지 않습니다. 나는 아직도 비어있는 db를 얻고있다 – NCFUSN
당신은 그것이 깨끗한 사본이라 확신합니까? 어떻게 든 내 애플 리케이션은 데이터베이스를 캐쉬했다. 심지어 내가 앱을 청소했을 때 ... 내가 다시 인스톨하기 위해서 앱 디렉토리를 수동으로 삭제해야만했다. ... – Ron
나는 그것을했다. iphone 시뮬레이터에서 삭제하려고했는데, 수동으로 다른 시험판을 삭제했다. 아무것도 도움이되지 않습니다. 모든 새로운 신선한 컴파일 날 또 0KB 데이터베이스를 가져온다. – NCFUSN