gpt4 book ai didi

cocoa - 导入核心数据时建立关系?

转载 作者:行者123 更新时间:2023-12-03 16:09:15 25 4
gpt4 key购买 nike

我有一个名为 importMoc 的内存托管对象上下文,我用它来导入记录(例如员工)。我已经解析了一个文件并在 importMoc 中设置了员工对象,但有一个非常重要的异常(exception)。用户确认他们想要处理 %d 名员工,但我不太清楚如何或何时设置员工的“父级”关系(例如设置他们的部门)。

出于我的目的,它们将全部导入到同一部门(用户已隐式选择该部门)。

显然我无法在两个上下文之间建立关系,我也是如此:

  1. 在 importMoc 中创建一个部门,然后当我合并更改时将“导入”部门与“真实”部门合并?
  2. 2)合并员工,然后获取所有新导入的员工(以某种方式!!!)并设置他们的部门?
  3. 3)我忽略了其他一些解决方案?

这似乎是一个简单的问题,但由于某种原因(懒惰?疲倦?愚蠢?)我不知道如何解决它!到目前为止我所尝试的一切似乎都过于复杂!

提前致谢!

最佳答案

如果 Department 对象已保存到持久存储中,那么您可以将它们放入另一个托管对象上下文中。由于您的对象无论如何都必须位于同一个持久存储中(因为不允许跨存储关系),因此您应该能够简单地将所需的对象提取到 importMoc 中。

例如:

foreach (NSDictionary *record in employeeRecords) {
NSManagedObject *employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:importMoc];
// Configure employee however you do that

NSString *managerID = [record objectForKey:@"someKeyThatUniquelyIdentifiesTheManager"];
NSFetchRequest *managerFetchRequest = [[NSFetchRequest alloc] init];
[managerFetchRequest setEntity:[NSEntity entityForName:@"Manager" inManagedObjectContext:importMoc]];
[managerFetchRequest setPredicate:[NSPredicate predicateWithFormat:@"managerProperty == %@", managerID]];
NSArray *managers = [importMoc executeFetchRequest:managerFetchRequest error:nil]; // Don't be stupid like me and catch the error ;-)
[managerFetchRequest release];

if ([managers count] != 1) {
// You probably have problems if this happens
}

[employee setValue:[managers objectAtIndex:0] forKey:@"manager"];
}

您还可以只执行一次获取请求,将所有管理器放入 importMoc 中,然后过滤该数组以每次找到正确的管理器。这可能会更有效率。换句话说,不要做我上面告诉你做的事情:-)

关于cocoa - 导入核心数据时建立关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1592246/

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