ios - 核心数据关系(快速)

标签 ios uitableview swift core-data relationships

我正在构建一个需要核心数据关系的应用程序:

entityA <<---> entityB  (e.g. any given entityA can hold many entityB objects)

我有两个带有 entityA 列表项的 TableView ,我希望能够在其中将 entityB 对象存储在任何给定的 entityA 对象中。

我不熟悉使用与核心数据的关系(并且对 swift 相当陌生),并且想了解如何使这项工作发挥作用。有没有人想到任何对我有帮助的快速教程或任何其他可以帮助我学习的资源?

抱歉,如果我的问题没有多大意义,如果您需要,请让我澄清一下。

谢谢!

更新:

这里更具体地说明了我想学习的内容。

假设我有实体“人”(属性可能包括姓名、年龄等)和一个 TableView ,我的应用程序用户可以在其中添加一个人。 (这个我已经建立并且知道如何适本地做)但是,现在我想添加实体“Meal”(属性可能包括食品),Meal 是它自己的表格 View ,我可以通过选择我要访问的人来访问它想加餐到。每个人可以多吃一顿饭,但每顿饭只能有一个人。

问题是:为了完成此任务,我的核心数据模型、fetchRequests 等应该是什么样子?

希望已经足够清楚了! :)

谢谢

enter image description here

这是我制作餐食的函数代码片段:

    func createMeal() {
    let entityDescription = NSEntityDescription.entityForName("Meal", inManagedObjectContext: managedObjectContext!)
    let meal = Meal(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)

    meal.mealName = mealNameTxt.text
    meal.mealItem1 = mealItem1Txt.text

    managedObjectContext?.save(nil)
}

最佳答案

嗯,这很简单。让我们举个例子,你有一个分支,分支有很多规范。首先,您需要转到您的 xcdatamodel 并创建您的数据实体

enter image description here

然后你打开你的编辑器(表格样式)并在你的分支实体中建立关系

enter image description here

之后你还需要在你的 branchSpecs 中设置关系拼写错误

enter image description here

就是这样!您刚刚在 CoreData 实体之间创建了关系。您需要做的就是生成子类对象

enter image description here

现在你已经准备好了。你会在你的分支类中找到一个 NSSet * 对象,它包含该分支的数据相关规范。您还会发现一个名为 addSpecsObject 的方法,您可以使用它来存储规范对象。

以我为例的代码示例:

Branch * branch = [NSEntityDescription insertNewObjectForEntityForName:@"Branch"
                                                  inManagedObjectContext:managedObjectContext];
    branch.name = obj.name;
    branch.lattitude = obj.latitude;
    branch.longitude = obj.longitude;
    branch.dispalyedDescription = obj.dispalyedDescription;


    for (FLBranchesSpecs * spec in obj.branchSpecs) {
        BranchSpecs * branchSpec = [NSEntityDescription insertNewObjectForEntityForName:@"BranchSpecs"
                                                        inManagedObjectContext:managedObjectContext];
        branchSpec.type = @(spec.type);
        branchSpec.key = spec.key;
        branchSpec.value = spec.value;
        [branch addSpecsObject:branchSpec];
    }

    NSError *error;
    if (![managedObjectContext save:&error])
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);

一个与你想要的相似的东西

let person: AnyObject = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: self.managedObjectContext!)
    //do you code assignment here
    for meal in listOfMeals{
        person.addMealObject(meal)
    }
    var error: NSError?
    self.managedObjectContext?.save(&error)

关于ios - 核心数据关系(快速),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326959/

相关文章:

android - iOS 和 Android 应用动态 UI 所需的技术推荐

python - 是否可以使用 Python 为 iOS 和 Android 编写跨平台应用程序?

ios - 需要指导来维护每个 Tableview 单元格的 NSTimer

ios - NSURL 实现的 UITableView 上的 GCD

ios - UITableViewCell : unable to simultaneously satisfy constraints

ios - CognitoIdentityCredentials 无权执行 : dynamodb:Query on resource:

ios - 按特定顺序排列单元格

ios - 如何本地化静态 UITableView 部分?

ios - UINavigationBar 在推送时更改颜色

ios - 符合协议(protocol)的 UIView 子类的 Swift 数组