Dar*_*nor 19 sqlite iphone core-data objective-c
我正在创建一个应用程序并尝试使用核心数据,因为它似乎是目标C批准的创建数据存储系统的方式.我使用的用例涉及"多对多"关系,就像您通常在标准SQL系统中看到的那样.我理解目标C不是数据库,而且工作方式不同.我还在这里查看了文档:
还有其他几个地方.然而,我仍然遇到麻烦.有人可以向我解释如果你有一个需要使用SQL交叉引用表的用例你会怎么做?例如:
经理人| 雇员
经理可能有几名员工,但员工可能还有几位经理.在SQL中,我创建了一个交叉引用表,然后使用它.
示例:http://www.tomjewett.com/dbdesign/dbdesign.php?page = manymany.php
有人可以解释你如何在核心数据中做到这一点?
根据核心数据文档,他们说:
"您使用两对多关系定义多对多关系.第一对多关系从第一个实体到第二个实体.第二个到多个关系从第二个实体到第一个实体.然后将每个设置为另一个的倒数.(如果您有数据库管理的背景,这引起您的关注,请不要担心:如果您使用SQLite存储,Core Data会自动为您创建中间连接表.) "
但是,除了"不担心"之外,我不知道这怎么可能起作用?
mor*_*tar 55
彼得:"我有九个老板,鲍勃." 鲍勃:"再说一次?" 彼得:" 九."
把你的大脑从数据库中拿出来.不要问如何访问交叉引用表.询问如何为经理或员工的经理找到员工.
如果使用NSManagedObject的自定义子类,则可以按文档声明属性.然后你可以简单地说:
NSSet *mgrsEmployees = mgr.employees;
NSSet *employeesMgrs = employee.managers;
Run Code Online (Sandbox Code Playgroud)
这不会给你所有员工和所有经理,只有那位经理的所有员工和该员工的所有经理.改变关系:
[mgr addEmployeesObject:newEmployee];
[newEmployee addManagersObject:mgr]; // not necessary, automatic if you define inverse
[mgr removeEmployeesObject:transferredEmployee];
[transferredEmployee removeManagersObject:mgr]; // not necessary
[newMgr addEmployeesObject:transferredEmployee];
[transferredEmployee addManagersObject:newMgr]; // not necessary
Run Code Online (Sandbox Code Playgroud)
您只需要执行每对语句中的任何一个,并且只要您将经理和员工定义为彼此的反转,它就会隐式地执行另一个.
如果您不使用自定义子类,则访问更加冗长
NSSet *mgrsEmployees = [mgr valueForKey:@"employees"];
NSSet *employeesMgrs = [employee valueForKey:@"managers"];
NSMutableSet *changeMgrsEmployees = [mgr mutableSetValueForKey:@"employees"];
[changeMgrsEmployees addObject:newEmployee];
// not necessary
NSMutableSet *changeEmployeesMgrs = [employee mutableSetValueForKey:@"managers"];
[changeEmployeesMgrs addObject:mgr];
Run Code Online (Sandbox Code Playgroud)
等等.
| 归档时间: |
|
| 查看次数: |
14324 次 |
| 最近记录: |