我想通過一個主要的詳細排序表的迭代器,我想隨着我去填充主/細節結構。顯然,當我巢結果集我得到一個壞的訪問異常:sqlite3和fmdb嵌套FMResultSet是可能的嗎?
FMDatabase *db = self.database;
[db open];
db.traceExecution = YES;
db.logsErrors = YES;
FMResultSet *rs = [db executeQuery:@"select group_id, label from main.preference_group order by group_id"];
while ([rs next])
{
PreferenceGroup *pg = [[PreferenceGroup alloc] init];
pg.group_id = [rs intForColumn:@"group_id"];
pg.label = [rs stringForColumn:@"label"];
pg.translatedLabel = NSLocalizedString(pg.label, nil);
NSMutableArray * prefs = [[NSMutableArray alloc] init];
[prefGroups addObject:prefs];
FMResultSet *rs2 = [db executeQuery:@"select pref_id, label, value from main.preference where group_id = ? order by pref_id", pg.group_id, nil];
while ([rs2 next])
{
Preference * pref = [[Preference alloc] init];
pref.group_id = pg.group_id;
pref.pref_id = [rs2 intForColumn:@"pref_id"];
pref.label = [rs2 stringForColumn:@"label"];
pref.value = [rs2 stringForColumn:@"value"];
pref.translatedLabel = NSLocalizedString(pref.value, nil);
[prefs addObject:pref];
}
[rs2 close];
}
[rs close];
[db close];
在RS2(第二個結果集),我得到FMDatabase類中EXEC_BAD_ACCESS。
這是sqlite3/fmdb的限制還是我在這裏做錯了什麼?
我在你的代碼中看不到任何錯誤,除了第二個查詢定義中的一個* nil *。您需要通過調查究竟是什麼導致異常來縮小問題範圍。一種方法是去斷點導航器,並通過按下左下角的小按鈕將斷點放在所有異常處。這應該在導致異常的確切行中停止執行。 – lawicko
是的,我正在這樣做,但我花了一段時間才弄清'int'的事情,因爲錯誤有點誤導(來自像我這樣的Java世界的人)......無論如何,感謝您的回覆! –