gpt4 book ai didi

ios - 两个私有(private)队列上下文之间的 mergeChangesFromContextDidSaveNotification

转载 作者:行者123 更新时间:2023-11-29 12:17:55 27 4
gpt4 key购买 nike

在我的应用程序中,我调用服务器 API 来获取用户列表。我在带有 NSFetchedResultsController 的 UITableView 中显示这些用户。一些用户与当前连接的用户保持联系,而另一些则没有。首先,我向您展示我的核心数据堆栈(使用 MagicalRecord): enter image description here

我设法用 usersContext 向所有用户(联系人和非联系人)显示我在其中创建/更新/删除来自 Web 服务的所有用户。任何时候我保存 tableView 都会更新。这工作正常。

但我想将 usersContext 合并到 contactsContext 中,以便仅将联系人保存在商店中,以便在下次启动应用程序时直接显示他们。我的问题来了。当我 contactsContext mergeChangesFromContextDidSaveNotification 时,没有保存任何用户(当然还有联系人)。也许我的核心数据堆栈或我的代码是错误的:

// init
- (void)configureContactsStack
{
_contactsContext = [NSManagedObjectContext MR_contextWithStoreCoordinator:[NSPersistentStoreCoordinator MR_defaultStoreCoordinator]];
[_contactsContext MR_setWorkingName:@"Contacts context"];

_usersContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
[_usersContext MR_setWorkingName:@"Users context"];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(usersContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:_usersContext];
}


- (void)getAllUsers
{
// async server call with main thread callback :
[self.usersContext performBlock:^{
// ... create/update/delete users in usersContext with server objects
[self.usersContext MR_saveOnlySelfAndWait]; // will call usersContextDidSave:
}];
// end of server callback
}


- (void)usersContextDidSave:(NSNotification *)notification
{
if (notification.object == self.usersContext) {
[self.contactsContext performBlock:^{
[self.contactsContext mergeChangesFromContextDidSaveNotification:notification];
// delete all users not contacts from contactsContext
[Users deleteAllMatchingPredicate:[NSPredicate predicateWithFormat:@"contact != 1"] inContext:self.contactsContext];
[self.contactsContext MR_saveToPersistentStoreWithCompletion:nil];
}];
}
}

最佳答案

不要合并兄弟上下文。那会给你带来麻烦。 NSManagedObjectContext 的实例很便宜,当您使用私有(private)队列上下文时,它们会在一次 使用后被丢弃。使用它们,扔掉它们,为下一个需要完成的工作创建一个新的。

无需合并更改通知。

关于ios - 两个私有(private)队列上下文之间的 mergeChangesFromContextDidSaveNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31536110/

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