2013-08-27 3 views
0

어떤 이유로, 내 응용 프로그램은 문서 폴더에 데이터베이스를 만들지 않는 것 같습니다. 나는이 비디오 튜토리얼 (http://www.youtube.com/watch?v=bC3F8a4F_KE)을 따라 왔으며 (다운로드 한 소스 코드 (https://github.com/iffytheperfect1983/sqliteTutorial)를 가지고 있으며 시뮬레이터에서 완벽하게 실행되었다.)응용 프로그램 sqlite 데이터베이스를 만들지 않습니다

몇 가지 NSLog 문을 사용하여 문제를 찾아 냈습니다. 나는 "선언 된"문장까지 모든 코드가 문제없이 실행되었지만 나머지 NSLog 문장은 콘솔에 나타나지 않는다는 것을 깨달았습니다. 튜토리얼에서 내가 작성한 코드와 코드 사이에 끊임없이 이리저리 보였지만 해결책은 없었다.

다음은 코드입니다.

@interface ViewController() { 

NSMutableArray *letterArray; 
sqlite3 *letterDB; 
NSString *dbPathString; 

} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Set up 
    letterArray = [[NSMutableArray alloc]init]; 
    [[self letterList] setDelegate:self]; 
    [[self letterList] setDataSource:self]; 
    // create or open database 
    [self createOpenDB]; 

    // Display database 
    [self displayDB]; 
} 

// Create/open database 
- (void) createOpenDB { 
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
NSString *docPath = [path objectAtIndex:0]; 

dbPathString = [docPath stringByAppendingPathComponent:@"letters.db"]; 

char *error; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath:dbPathString]) { 
    const char *dbPath = [dbPathString UTF8String]; 
    NSLog(@"Declared"); 
    // create database here 
    if (sqlite3_open(dbPath, &lettersDB)==SQLITE_OK) { 
     NSLog(@"'If' statement is ok"); 
     const char *sql_stmt = "CREATE TABLE IF NOT EXISTS LETTERS (ID INTEGER PRIMARY KEY AUTOINCREMENT, A TEXT, B TEXT, C TEXT, D TEXT, E TEXT, F TEXT, G TEXT)"; 
     NSLog(@"Declared"); 
     sqlite3_exec(lettersDB, sql_stmt, NULL, NULL, &error); 
     NSLog(@"Execution complete."); 
     sqlite3_close(lettersDB); 
     NSLog(@"Close complete."); 
     NSLog(@"Database creation successful."); 
    } 
} 
} 

어떻게 해결할 수 있습니까? 미리 감사드립니다.

+0

오류를 확인하십시오. 데이터베이스를 여는 데 사용되는'if' 문에'else'를 추가하십시오. 'sqlite_errmsg()'를 기록하십시오. – rmaddy

+0

고맙습니다. 나는 그것을 명심해야한다. – chrisjr

답변

1

NSDocumentDirectory 디렉토리를 사용해야 할 때 NSDocumentationDirectory을 사용하고 있습니다.

변경이 : 여기에

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 

: 당신이 이러한 문제로 실행하면

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
+0

어떻게 그럴 수 있었을까요? 나는 그런 바보 야. 당신의 도움을 주셔서 감사합니다. – chrisjr

+0

오류를 확인했다면 놓치지 않았을 것입니다. ("찾을 수 없음"에 대해 nil을 반환했습니다.) –

+0

당신은 바보가 아닙니다. 나는이 뭉치를했다. 일반적인 실수로 Xcode의 자동 완성 기능으로 도움을받지 못합니다. – Aaron