Ich habe ein kleines sqlitedb in meinem iOS-Gerät. Wenn ein Benutzer eine Taste drückt, rufe ich die Daten von SQLite ab und zeige sie dem Benutzer.
Diesen Abrufteil möchte ich in einem Hintergrund-Thread machen (um den UI-Haupt-Thread nicht zu blockieren). Ich mache das so -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
Nach dem Abrufen und ein wenig Verarbeitung muss ich die Benutzeroberfläche aktualisieren. Da wir jedoch (als bewährte Methode) keine Aktualisierung der Benutzeroberfläche über Hintergrundthreads durchführen sollten. Ich rufe einen selectorOn-Mainthread so an -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Aber meine App stürzt im ersten Schritt ab. dh einen Hintergrund-Thread starten. Ist dies nicht eine Möglichkeit, Hintergrund-Threads in iOS zu starten?
UPDATE 1: Nachdem [self performSelectorInBackground....ich diesen Stacktrace erhalten habe, gibt es überhaupt keine Informationen -

UPDATE 2: Ich habe sogar versucht, einen Hintergrund-Thread wie diesen zu starten -
[NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];aber ich bekomme immer noch den gleichen Stacktrace.
Nur damit ich klarstelle, wenn ich diesen Vorgang am Hauptthread durchführe, läuft alles reibungslos ...
UPDATE 3 Dies ist die Methode, die ich aus dem Hintergrund ausführen möchte
- (void)getResultSetFromDB:(NSMutableArray *)toProceessDocids
{
SpotMain *mirror = [[SpotMain alloc] init];
NSMutableArray *filteredDocids = toProceessDocids;
if(![gMediaBucket isEqualToString:@""])
filteredDocids = [mirror FetchDocIdsForMediaBucketWithDocID:filteredDocids mBucket:gMediaBucket numRes:-1];
if(![gMediaType isEqualToString:@""])
filteredDocids = [mirror FetchDocIdsForMediaType:filteredDocids mediaType:gMediaType numRes:-1];
if(![gPlatform isEqualToString:@""])
filteredDocids = [mirror FetchDocIdsForPlatformID:filteredDocids platformId:@"1" numRes:-1];
self.resultSet = [mirror FetchObjectFromDocid:filteredDocids];
[filteredDocids release];
[mirror release];
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
return;
}
docidsbleibt.
docidssind retain. Ich habe es .h@property (nonatomic, retain) NSMutableArray *docids;
get; das sollte nur seinresultSetFromDB: