我正在创建一个应用程序并尝试使用核心数据,因为它似乎是目标C批准的创建数据存储系统的方式.我使用的用例涉及"多对多"关系,就像您通常在标准SQL系统中看到的那样.我理解目标C不是数据库,而且工作方式不同.我还在这里查看了文档:
还有其他几个地方.然而,我仍然遇到麻烦.有人可以向我解释如果你有一个需要使用SQL交叉引用表的用例你会怎么做?例如:
经理人| 雇员
经理可能有几名员工,但员工可能还有几位经理.在SQL中,我创建了一个交叉引用表,然后使用它.
示例:http://www.tomjewett.com/dbdesign/dbdesign.php?page = manymany.php
有人可以解释你如何在核心数据中做到这一点?
根据核心数据文档,他们说:
"您使用两对多关系定义多对多关系.第一对多关系从第一个实体到第二个实体.第二个到多个关系从第二个实体到第一个实体.然后将每个设置为另一个的倒数.(如果您有数据库管理的背景,这引起您的关注,请不要担心:如果您使用SQLite存储,Core Data会自动为您创建中间连接表.) "
但是,除了"不担心"之外,我不知道这怎么可能起作用?
我的练习应用程序有以下实体关系.

而且我坚持使用由多个实体组成的新配方的保存部分.
我有RecipeIngredient中间(联合)实体的原因是我需要一个额外的属性,将按配方存储不同数量的成分.
这是实现,显然没有为每个新成分分配金额值,因为我不确定是否需要初始化这个RecipeIngredient实体,或者即使我这样做,我也不知道如何将它们全部粘合在一起食谱.
@IBAction func saveTapped(sender: UIBarButtonItem) {
// Reference to our app delegate
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
// Reference moc
let context: NSManagedObjectContext = appDel.managedObjectContext!
let recipe = NSEntityDescription.entityForName("Recipe", inManagedObjectContext: context)
let ingredient = NSEntityDescription.entityForName("Ingredient", inManagedObjectContext: context)
// Create instance of data model and initialise
var newRecipe = Recipe(entity: recipe!, insertIntoManagedObjectContext: context)
var newIngredient = Ingredient(entity: ingredient!, insertIntoManagedObjectContext: context)
// Map properties
newRecipe.title = textFieldTitle.text
newIngredient.name = textViewIngredient.text
...
// Save Form
context.save(nil)
// Navigate …Run Code Online (Sandbox Code Playgroud)