Tengo un pequeño sqlitedb en mi dispositivo iOS. Cuando un usuario presiona un botón, obtengo los datos de sqlite y se los muestro al usuario.
Esta parte de búsqueda la quiero hacer en un hilo de fondo (para no bloquear el hilo principal de la interfaz de usuario). Hago esto así -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
Después de la búsqueda y un poco de procesamiento, necesito actualizar la interfaz de usuario. Pero dado que (como buena práctica) no deberíamos realizar la actualización de la interfaz de usuario desde subprocesos en segundo plano. Llamo selector
a mainthread así -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Pero mi aplicación falla en el primer paso. es decir, iniciar un hilo de fondo. ¿No es esta una forma de iniciar subprocesos en segundo plano en iOS?
ACTUALIZACIÓN 1: Después de [self performSelectorInBackground....
obtener este stacktrace, no hay información en absoluto -
ACTUALIZACIÓN 2: Incluso lo intenté, comenzando un hilo de fondo como ese,
[NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
pero aún obtengo el mismo seguimiento de pila.
Solo para aclarar, cuando realizo esta operación en el hilo principal, todo funciona sin problemas ...
ACTUALIZACIÓN 3 Este es el método que estoy tratando de ejecutar desde el fondo
- (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
se conserve.
docids
son retain
. Lo he puesto .h
como@property (nonatomic, retain) NSMutableArray *docids;
get
; eso debería serresultSetFromDB: