iOS 8 Swift - 保存多个实体的数据

Posted

技术标签:

【中文标题】iOS 8 Swift - 保存多个实体的数据【英文标题】:iOS 8 Swift - saving data of multiple entities 【发布时间】:2015-03-27 11:54:59 【问题描述】:

我的练习应用具有以下实体关系。

我被一个由多个实体组成的新配方的保存部分所困扰。

我有 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 back to root vc
    self.navigationController?.popToRootViewControllerAnimated(true)


【问题讨论】:

if (![context save:&error]) NSLog(@"Can't Save! %@ %@", error, [error localDescription]); 在将所有值添加到 Object 后调用此方法。 在您调用 saveTapped() 方法之前,成分实体是否有一些值? 【参考方案1】:

我不确定是否需要初始化这个 RecipeIngredient 实体,或者即使我这样做了,我也不知道如何将它们全部粘合为一个食谱。

您需要像创建任何其他实体一样创建 RecipeIngredient 实例。您可以做与您所做的基本相同的事情,例如配方:

// instantiate RecipeIngredient
let recipeIngredient = NSEntityDescription.entityForName("RecipeIngredient", inManagedObjectContext: context)
let newRecipeIngredient = RecipeIngredient(entity:recipeIngredient!, insertIntoManagedObjectContext:context)
// set attributes
newRecipeIngredient.amount = 100
// set relationships
newRecipeIngredient.ingredient = newIngredient;
newRecipeIngredient.recipe = newRecipe;

请注意,由于您已经为 ingredientrecipe 提供了逆向关系,因此您无需将 newRecipeIngredient 也添加到 newRecipe.ingredients 或将 newRecipeIngredient 添加到 newIngredient.recipes

【讨论】:

以上是关于iOS 8 Swift - 保存多个实体的数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 Core Data - 如何同步保存上下文?

Swift核心数据多对多关系不保存实体

swift:用于博客 + 多个实体的带有滑出式导航的核心数据

Swift 中的核心数据:仅在 for 循环中保存最后一个对象

相关实体的 iOS 核心数据持久性

如何在 Swift 3 中将自定义类保存为 CoreData 实体的属性?