Ben tabloları bir ana ayrıntı tür yoluyla iterator çalışıyorum ve ben gitmek gibi ana/ayrıntı yapılarını doldurmak istiyorum. Ben KÖTÜ Erişim istisna bulunca yuva sonuç kümeleri Görünüşe: RS2 olaraksqlite3 ve fmdb iç içe FMResultSet mümkündür?
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];
(ikinci sonuç kümesi) Ben FMDatabase sınıf içindeki EXEC_BAD_ACCESS olsun.
bu Sqlite3/fmdb bir kısıtlama var mı yoksa burada yanlış bir şey yapıyorum?
Bir miktar hariç Kodunuzdaki yanlış bir şey görmüyorum * İkinci sorgu tanımında nil *. Özel durumun tam olarak nedenini araştırmak suretiyle sorunu daraltmanız gerekir. Bunu yapmanın bir yolu, kesme noktaları navigator'a gitmek ve soldaki küçük + düğmesine basarak tüm özel durumlar için kesme noktasını yerleştirmektir. Bu, istisna neden olan tam satırdaki yürütmeyi durdurmalıdır. – lawicko
Evet, bunu yapıyordu ama hata olarak 'int' şeyi anlamaya biraz zaman aldı, neyse ... cevap için teşekkürler (benim gibi Java dünyadan gelenlere itibaren) yanıltıcı biraz oldu! –