Eu tenho um pequeno sqlitedb em meu dispositivo iOS. Quando um usuário pressiona um botão, eu busco os dados do sqlite e os mostro ao usuário.
Esta parte de busca eu quero fazer em um thread de segundo plano (para não bloquear o thread principal da IU). Eu faço isso assim -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
Após a busca e um pouco de processamento, preciso atualizar a IU. Mas já que (como uma boa prática), não devemos realizar a atualização da IU a partir de threads em segundo plano. Eu chamo um selector
no mainthread assim -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Mas meu aplicativo trava na primeira etapa. ou seja, iniciando um tópico de fundo. Não é uma maneira de iniciar threads em segundo plano no iOS?
ATUALIZAÇÃO 1: depois de [self performSelectorInBackground....
obter este rastreamento de pilha, nenhuma informação nunca -
ATUALIZAÇÃO 2: Eu até tentei, iniciando um thread de segundo plano assim -
[NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
mas ainda obtenho o mesmo rastreamento de pilha.
Só para que eu esclareça, quando eu executo essa operação no thread principal tudo funciona bem ...
ATUALIZAÇÃO 3 Este é o método que estou tentando executar em segundo plano
- (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
seja retido.
docids
são retain
. Eu coloquei .h
como@property (nonatomic, retain) NSMutableArray *docids;
get
; isso deveria serresultSetFromDB: