У меня действительно странный.У меня есть метод, который отлично работает, но я пытаюсь преобразовать его, чтобы сделать данные более управляемыми базой данных, чем жесткое кодирование, которое существует в настоящее время.Когда я добавляю вызов в свой метод базы данных для извлечения данных, я получаю EXC_BAD_ACCESS долго ПОСЛЕ того, как база данных завершена.Я сузил это до базы данных, так как, если я вообще не делаю вызов, сбой не произойдет.
Итак, вызов метода выглядит следующим образом (это гдеесли я закомментирую, это не приведет к сбою):
NSString *thisRoomNumber = [self readLocationsFromDatabaseBetweenPoints:fX YPoint:fY];
и сам метод выглядит так:
#pragma mark -
#pragma mark SQL Operations
- (NSString *)readLocationsFromDatabaseBetweenPoints:(float)tapPointX YPoint:(float)tapPointY{
// Setup some globals
databaseName = @"db.sqlite";
// Get the path to the documents directory and append the databaseName
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
// Setup the database object
sqlite3 *database;
NSString *sqlStringBuilder = [NSString stringWithFormat:@"select * from floors where propertyid = ? and floorid = ? and %f between topleftxcoord and bottomrightxcoord and %f between topleftycoord and bottomrightycoord", tapPointX, tapPointY];
NSString *roomNumber = @"0";
// 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 = [sqlStringBuilder UTF8String];
NSLog(@"%@", [NSString stringWithUTF8String:sqlStatement]);
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
sqlite3_bind_int(compiledStatement, 1, iPropertyId);
sqlite3_bind_int(compiledStatement, 2, iFloorId);
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSInteger aLocId = sqlite3_column_int(compiledStatement, 0);
NSInteger aTLX = sqlite3_column_int(compiledStatement, 1);
NSInteger aTLY = sqlite3_column_int(compiledStatement, 2);
NSInteger aBRX = sqlite3_column_int(compiledStatement, 3);
NSInteger aBRY = sqlite3_column_int(compiledStatement, 4);
NSString *aRoomIdent = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)];
roomNumber = aRoomIdent;
}
}else{
NSLog(@"%d", sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL));
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
[documentsDir release];
[documentPaths release];
//[roomNumber release];
[sqlStringBuilder release];
return roomNumber;
}
Сам вызов работает нормально.Я получаю результаты, как и ожидалось, «thisRoomNumber» возвращается с тем, что я ожидаю.Как только вызывающий метод запускает следующую часть, он возвращается к делегату, и в этот момент происходит сбой.Я знаю, что трудно увидеть, что происходит без большого количества кода, но огромное количество кода сделало бы этот пост МАССИВНЫМ.
Надеюсь, это даст нам отправную точку для исправления этого.Кроме того, дамп журнала аварий не дает абсолютно ничего полезного для этого.
Спасибо за любую помощь, которую вы, ребята, можете предоставить!Если вам нужна дополнительная информация, дайте мне знать, я сделаю все возможное, чтобы добавить к ней по мере необходимости.