У меня есть следующий код:
appDel = (Staff_ManagerAppDelegate *)[[UIApplication sharedApplication]delegate];
const char *dbpath = [appDel.databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:@"SELECT * FROM Staff"];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while(sqlite3_step(statement) == SQLITE_ROW) {
NSMutableDictionary *personStuff = [[NSMutableDictionary alloc] init];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)] forKey:@"PersonID"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 1)] forKey:@"Name"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 2)] forKey:@"Surname"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 3)] forKey:@"Email"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 4)] forKey:@"Phone"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 5)] forKey:@"Birthdate"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 6)] forKey:@"Adress"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 7)] forKey:@"Postal"];
[personStuff setValue:[[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 8)] forKey:@"Town"];
[allStaff addObject:personStuff];
}
sqlite3_finalize(statement);
}
sqlite3_close(contactDB);
}
Моя проблема довольно проста: в строке const char *dbpath = [appDel.databasePath UTF8String];
я получаю ошибку BAD ACCESS.
В appdel путь к моей базе данных создается следующим образом:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:@"staffmanager.sqlite3"];
BOOL success;
NSLog(@"DatabasePath: %@", databasePath);
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];
if(!success)
{
NSLog(@"Creating path");
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"staffmanager.sqlite3"]];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}
Что я делаю не так?