Табличное представление зависает при запуске SQL-запросов в потоке - PullRequest
2 голосов
/ 08 февраля 2012

Я прикрепил новый поток и в этом потоке запускаю 5 запросов SQLite.

Проблема в том, что до завершения выполнения всех моих запросов я не могу прокрутить табличное представление. Он останавливается на несколько секунд.

-(void)viewDidAppear:(BOOL)animated
{
    [NSThread detachNewThreadSelector:@selector(GetBackEndData) 
        toTarget:appDelegate withObject:nil];
}

// this is in appDelegate
-(void)GetBackEndData
{   
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    if([dicBarnearMe_Detail count]==0)
    {
        // this are sql queries method.
        [appDelegate SelectBeersonbottle_Count];
        [appDelegate SelectBeersonTap_Count];
        [appDelegate SelectGrowler_Count];
        [appDelegate SelectHappyHours_Count];
        [appDelegate SelectEvents_Count];

        // After completing this process I'm post notification 
        // for reloading table in other controller.
        [[NSNotificationCenter defaultCenter] postNotificationName:@"reload" 
            object:nil userInfo:nil];
    }

    [pool release];     
}

1 Ответ

0 голосов
/ 19 октября 2013

Вы создаете новый поток в viewDidAppear и выполняете селектор GetBackEndData в отдельном потоке.

[[NSNotificationCenter defaultCenter] postNotificationName:@"reload" object:nil userInfo:nil];

вы делаете NSNotificationCenter в GetBackEndData и перезагружаете некоторые данные, что означает, что вам нужно ждать, пока ваш поток завершит выполнение и заблокирует поток пользовательского интерфейса.

создание потока в viewDidAppear - неправильный подход. Вы можете использовать dispatchQue в какой-либо другой функции, или альтернативным вариантом является ожидание завершения выполнения потока и показ индикатора активности.

...