2013-08-27 2 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

При запуске в такие проблемы, проверьте ошибки. Добавьте 'else' в оператор' if', используемый для открытия базы данных. Log 'sqlite_errmsg()'. – rmaddy

+0

Спасибо. Я обязательно буду помнить об этом. – chrisjr

ответ

1

Вы используете NSDocumentationDirectory, когда вы должны использовать каталог NSDocumentDirectory.

Изменить это:

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

Для этого:

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

Как я мог пропустить это? Я такой идиот. Спасибо за вашу помощь. – chrisjr

+0

Вы бы не пропустили его, если бы вы проверили ошибки. (В том числе нуль вернулся за «не найден».) –

+0

Ты не идиот. Я сделал это связкой. Это распространенная ошибка, которой не помогает автоматическое завершение в Xcode. – Aaron