核心数据简单的一对一关系

Posted

技术标签:

【中文标题】核心数据简单的一对一关系【英文标题】:Core data simple one-to-one relationship 【发布时间】:2011-10-21 20:34:59 【问题描述】:

我有一个简单的核心数据问题。

我设置了一个员工实体和一个employeeDetails 实体。两者都有指向对方的关系,形成简单的一对一关系。每个员工都有一个employeeDetail。

我能够存储新员工并在需要时获取他们。我的问题是如何在存储员工的同时存储匹配的员工详细信息,以及如何在 fetch 中检索匹配员工的详细信息?

感谢您提供的任何帮助。

【问题讨论】:

如果你总是有一个employeeDetail,而且是1:1,为什么它是一个单独的实体? 因为我在内存中保存了大量的员工数据,只有在点击员工行查看详细信息时才需要访问详细信息。 【参考方案1】:

使用每次插入员工 relvar 时都会触发的触发器。

http://en.wikipedia.org/wiki/Database_trigger

【讨论】:

Trigger是一个数据库概念,据我所知ios core-data中不存在。【参考方案2】:

我通过为实体重新生成类解决了我的问题,核心数据将添加一个表示关系的动态变量。当我存储实体时,我创建了一个 Employee 和 EmployeeDetails 对象,并将员工详细信息字段(由核心数据动态管理)指向我的 EmployeeDetails 对象。

- (void)addEmployee :(NSDictionary *)_employee     

    // Create a new instance of the Employee entity.
    Employee *employee = (Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:managedObjectContext];
    EmployeeDetails *employeeDetails = (EmployeeDetails *)[NSEntityDescription insertNewObjectForEntityForName:@"EmployeeDetails" inManagedObjectContext:managedObjectContext];

    // Add the new employee
    employee.firstName = [_employee objectForKey:@"first_name"];;
    employee.lastName = [_employee objectForKey:@"last_name"];;
/* --> */   employee.details = employeeDetails;  // Associate with details object

    // Add details
    employeeDetails.address    = [self getValue:[e objectForKey:@"street_address"]];   
    employeeDetails.cellPh     = [self getValue:[e objectForKey:@"cell"]];

    // Save the data
    NSError *error;
    if (![managedObjectContext save:&error]) 
        NSLog(@"core date save error: %@", error);
       

【讨论】:

以上是关于核心数据简单的一对一关系的主要内容,如果未能解决你的问题,请参考以下文章

父/子和一对一/对多反向关系之间的核心数据差异

在删除一对一关系的核心数据期间发现 NSManagedObject 的问题

IOS:通过一对多关系获取核心数据

在具有多对一/一对多关系的核心数据中构造谓词

核心数据一对多关系

如何在一对多核心数据关系中获取特定数据?