Estoy tratando de iterar a través de un tipo de tabla maestra de detalles y me gustaría llenar las estructuras maestra/de detalles a medida que avanzo. Al parecer, cuando los conjuntos de resultados I nidos que tienen una mala excepción acceso:sqlite3 y fmdb anidados FMResultSet es posible?
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];
En los RS2 (segundo conjunto de resultados) consigo el EXEC_BAD_ACCESS dentro de la clase FMDatabase.
¿Es esto una restricción de sqlite3/fmdb o estoy haciendo algo mal aquí?
No veo nada incorrecto en su código, excepto un pequeño * nil * en la segunda definición de la consulta. Debe reducir el problema investigando qué causa exactamente la excepción. Una forma de hacerlo es ir al navegador de puntos de interrupción y colocar el punto de interrupción en todas las excepciones presionando el pequeño botón + en la parte inferior izquierda. Esto debería detener la ejecución en la línea exacta que causa la excepción. – lawicko
Sí, estaba haciendo eso, pero me tomó un tiempo para entender lo 'int' ya que el error era un poco engañoso (de aquellos que provienen del mundo de Java como yo) ... De todos modos, ¡gracias por la respuesta! –