gpt4 book ai didi

ios - 使用 mergeChangesFromContextDidSaveNotification :saveNotification I am not getting changes show up in main thread

转载 作者:可可西里 更新时间:2023-11-01 04:35:14 26 4
gpt4 key购买 nike

我正在使用后台线程执行一项长时间运行的任务,包括从服务中提取数据并通过 CoreData 将记录插入数据库。正如这里的许多答案所建议的那样,我正在观察 NSManagedObjectContextDidSaveNotification 通知。我正在使用这两种方法。在 mergeChanges 方法中,我在通知对象中看到了我的插入,但在这两种方法完成后,我的主 MOC 仅显示后台线程之前的更改。为什么它不反射(reflect)来自后台线程的新更改。我错过了什么?

- (void) registerContextDidSaveNotificationForManagedObjectContext:       (NSManagedObjectContext*) moc {
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:moc];
}

- (void)mergeChanges:(NSNotification *)notification {
//AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *mainContext = self.managedObjectContext;

// Merge changes into the main context on the main thread
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
}

最佳答案

注册 NSManagedObjectContextDidSaveNotification 的线程必须是调用 [mainContext mergeChangesFromContextDidSaveNotification: notification] 的线程。

例如:当线程 B 发生变化时,你注册线程 A NSManagedObjectContextDidSaveNotification。然后你收到通知,但是,这些变化与线程 B 相关联,你不能直接访问变化,所以您将通知作为参数传递给 mergeChangesFromContextDidSaveNotification:(您将其发送到线程 A 上的上下文)以合并这些更改。

所以请检查他们是否在同一个线程上?

关于ios - 使用 mergeChangesFromContextDidSaveNotification :saveNotification I am not getting changes show up in main thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com