我使用队列和结果控制器的组合来更新和显示一些核心数据对象。
在我的 uitableviewcontroller 中,我每隔 X 秒调用一次主控制器对象中的方法。
[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];
该操作本身会创建一个新的 managedobjectcontext 并尝试从 Web 下载一些 xml 并尝试更新 coredata 数据库...(此代码有效!)
在我的主控制器中,我收到上下文更改消息,我使用 mergeChangesFromContextDidSaveNotification 合并和更新我的主对象上下文。所有结果控制器都使用这个主对象上下文。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationManagedObjectContextDidSave:) name:
NSManagedObjectContextDidSaveNotification object:nil];
实际上一切正常,但是当我在 NSOperation 中插入一个新对象时,需要 4-6 秒直到 UI 更新并显示这个新对象......此外,UI 块......它不可能滚动或触发其他交互.. .
当我不使用队列并将我的代码下载并更新到我的 uitableviewcontroller 类中的方法中时,我使用它
[NSThread detachNewThreadSelector:@selector(codeFromUpdatePersonsOperation) toTarget:self withObject:nil];
一切运行良好,没有任何延迟或 UI 冻结...
有人可以向我解释这种行为吗?
谢谢