Проблема SQLite - путь к базе данных - PullRequest
0 голосов
/ 19 июля 2010

Я пытаюсь выбрать данные из базы данных, и у меня есть следующий код: Код:

// Setup the database object
 sqlite3 *database;

 // Init the animals Array
 list = [[NSMutableArray alloc] init];
 NSLog(@"documents path: ", documentsDir); 
 NSLog(@"database path: ", databasePath);

 // Open the database from the users filessytem
 if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
 {
  // Setup the SQL Statement and compile it for faster access
  const char *sqlStatement = "select route_name from Route";
  sqlite3_stmt *compiledStatement;
  if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 
  {
   // Loop through the results and add them to the feeds array
   while(sqlite3_step(compiledStatement) == SQLITE_ROW) 
   {
    // Read the data from the result row
    NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

    // Add the animal object to the animals Array
    //[list addObject:animal];    
    [list addObject:aName];    
    //[animal release];
   }
  }
  // Release the compiled statement from memory
  sqlite3_finalize(compiledStatement);  
 }
 sqlite3_close(database);

Я получаю ошибку EXC_BAD_ACCESS при первом операторе IF.У кого-нибудь есть мысли.

Также в NSLOG DocumentsDir и databasePath пустые.

У меня есть следующий код в ViewDidLoad:

-(void)viewDidLoad 
{ 
 // Setup some globals
 databaseName = @"xxxxxxCoreData.sqlite";

 // Get the path to the documents directory and append the databaseName
 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *documentsDir = [documentPaths objectAtIndex:0];
 documentsDir = [documentPaths objectAtIndex:0];
 databasePath = [documentsDir stringByAppendingPathComponent:databaseName];

1 Ответ

1 голос
/ 19 июля 2010

Похоже, что databasePath не сохраняется, поэтому между временем загрузки представления и выполнением кода вашей базы данных оно уже выпущено. Если вы хотите сохранить эти переменные, вам нужно изменить две последние строки на эту:

documentsDir = [[documentPaths objectAtIndex:0] retain];
databasePath = [[documentsDir stringByAppendingPathComponent:databaseName] retain];

И так как вы делаете это в viewDidLoad, вы должны выпустить их в viewDidUnload (также установите nil в этом методе) и dealloc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...