У мене на пристрої iOS невеликий sqlitedb. Коли користувач натискає кнопку, я отримую дані з sqlite і показую їх користувачеві.
Цю частину отримання, яку я хочу зробити у фоновому потоці (щоб не блокувати основний потік інтерфейсу). Я роблю це так -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
Після отримання & трохи обробки, мені потрібно оновити інтерфейс користувача. Але оскільки (як хороша практика) нам не слід проводити оновлення інтерфейсу користувача з фонових потоків. Я називаю selector
на мейнтеді так -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Але мій додаток виходить з ладу на першому кроці. тобто починається фонова нитка. Це не спосіб запустити фонові потоки в iOS?
ОНОВЛЕННЯ 1: Після того, як [self performSelectorInBackground....
я отримаю цей стек-трек, немає інформації, що так -
ОНОВЛЕННЯ 2: Я навіть намагався, запускаючи фонову нитку так -
[NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
але все одно отримую таку ж стек-трак.
Просто для того, щоб я уточнив, що коли я виконую цю операцію на головній нитці, все працює гладко ...
ОНОВЛЕННЯ 3 Це метод, який я намагаюся запустити з фону
- (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
збережено.
docids
є retain
. Я поставив це .h
як@property (nonatomic, retain) NSMutableArray *docids;
get
; це просто повинно бутиresultSetFromDB: