В моем приложении я вызываю веб-службу каждые 3 секунды в фоновом потоке, используя dispath_async
, и сохраняю ответ в coredata
после этого извлекаю записи из coredatda и отображаю в пользовательском интерфейсе. Мой код
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[WebService webServicesManager]getDataWithPath:str ResponseBlock:^(NSString* response, NSString* error)
{
if (response != nil) {
// save records in core data
}
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Code here is run on the main thread
[self showNewRecordsFromDB];
});
}
}
}];
});
Код выше работает нормально в течение некоторого времени, но через некоторое время (~ 4-5 минут) я получаю одни и те же данные несколько раз, т.е. одна и та же запись отображается на экране несколько раз.
Является ли это проблемой безопасности потоков или какой-либо другой ошибкой в моем коде? пожалуйста, помогите мне преодолеть эту проблему.
Изменить. Я заменил параллельную очередь последовательной очередью.
dispatch_queue_t = dispatch_queue_create("Messgae Queue",NULL);
dispatch_async(queue, ^{
//rest code same as above
});
и у меня нет проблем. Это нормально или мне все еще нужно использовать другой контекст для другого потока?