У меня огромная проблема с SQLite в приложении для iPhone, которая должна быть скоро исправлена для клиента!По сути, я извлекаю столбец из базы данных и загружаю его в табличное представление на viewWillAppear.Он работает нормально, в первые несколько раз загружается представление, но затем он неожиданно начинает возвращать пустые (нулевые) значения.После проверки выясняется, что, возможно, существует проблема с открытием базы данных, но это мой первый проект на SQLite, поэтому трудно понять, что происходит.
Вот код, который я использую для извлечения информации SQL:
+ (void) getInitialDataToDisplay:(NSString *)dbPath {
NSLog(@"INCOME CALLED 1");
NavTabAppDelegate *appDelegate = (NavTabAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.incomeArray = [[NSMutableArray alloc] init];
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
NSLog(@"INCOME CALLED 2");
const char *sql = "select IncomeID, IncomeName from Income ORDER BY IncomeName asc";
//const char *sql2 = "select categoryID, Size from coffee";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
NSLog(@"INCOME CALLED 3");
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
NSLog(@"INCOME CALLED 4");
NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
Income *incomeObj = [[Income alloc] initWithPrimaryKey:primaryKey];
//This is how I pull info from the database using the above select statement and setting it in the coffeeObj property of Coffee class
incomeObj.incomeName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
//coffeeObj.coffeeSize = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
incomeObj.isDirty = NO;
[appDelegate.incomeArray addObject:incomeObj];
[incomeObj release];
NSLog(@"INCOME OBJECTS %@", incomeObj.incomeName);
//NSLog(@"CALLED");
}
}
}
else{
sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory
NSLog(@"INCOME CALLED 5");
}
NSLog(@"INCOME CALLED 6");
}
Я вызываю код в viewWillAppear следующим образом:
[Income getInitialDataToDisplay:[appDelegate getDBPath]];
Также это вывод из моей консоли при возникновении ошибки:
2011-06-17 12:21:48.307 CashCal[318:707] GET DB PATH CALLED
2011-06-17 12:21:48.310 CashCal[318:707] /var/mobile/Applications/2BD7CA1D-C7AB-4425-B5C1-974C4F4D057C/Documents/SQL.sqlite
2011-06-17 12:21:48.312 CashCal[318:707] INCOME CALLED 1
2011-06-17 12:21:48.314 CashCal[318:707] INCOME CALLED 5
2011-06-17 12:21:48.318 CashCal[318:707] INCOME CALLED 6
Похоже, проблема в первом операторе if, открывающем базу данных.Мне действительно нужна помощь в этом