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 selector
On-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;
}
docids
bleibt.
docids
sind retain
. Ich habe es .h
@property (nonatomic, retain) NSMutableArray *docids;
get
; das sollte nur seinresultSetFromDB: