У меня на устройстве iOS есть небольшой sqlitedb. Когда пользователь нажимает кнопку, я извлекаю данные из sqlite и показываю их пользователю.
Эту часть выборки я хочу сделать в фоновом потоке (чтобы не блокировать основной поток пользовательского интерфейса). Я так делаю -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
После получения и небольшой обработки мне нужно обновить пользовательский интерфейс. Но поскольку (как хорошая практика) мы не должны выполнять обновление пользовательского интерфейса из фоновых потоков. Я называю это selector
на mainthread так -
[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: