Я использую комбинацию очереди и контроллера результатов для обновления и отображения некоторых объектов coredata.
в моем контроллере uitableview я каждую секунду вызываю метод в моем объекте основного контроллера.
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test:) userInfo:nil repeats:YES];
}
- (void)test:(NSTimer*)theTimer {
[[MainController instance] updatePersons];
}
В этом методе пользовательский объект NSOperation будет добавлен в мой основной Q.
- (BOOL)updatePersons {
UpdatePersonsOperation* u = [[UpdatePersonsOperation alloc] init];
[u setQueuePriority:NSOperationQueuePriorityVeryHigh];
[operationQ u];
[u release];
Сама операция создает новый управляемый объектный текст и пытается загрузить некоторый xml из Интернета и пытается обновить базу данных coredata ... (Этот код работает!)
В моем главном контроллере я получаю сообщение об изменении контекста и использую mergeChangesFromContextDidSaveNotification для слияния и обновления контекста моего основного объекта. Все контроллеры результатов используют этот контекст основного объекта.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationManagedObjectContextDidSave:) name:
NSManagedObjectContextDidSaveNotification object:nil];
На самом деле все работает, но когда я вставляю новый объект в NSOperation, пользовательский интерфейс обновляется и отображает этот новый объект через 4-6 секунд ... Более того, пользовательский интерфейс блокирует ... Невозможно прокрутить или вызвать другой взаимодействие ...
Когда я не использую очередь и помещаю свой код для загрузки и обновления объектов в метод внутри моего класса uitableviewcontroller, и я использую это
[NSThread detachNewThreadSelector:@selector(codeFromUpdatePersonsOperation) toTarget:self withObject:nil];
Все работает очень хорошо без каких-либо задержек или зависания интерфейса ...
Может кто-нибудь объяснить мне это поведение?
Спасибо