【问题标题】:Query in CoreData SwiftCoreData Swift 中的查询
【发布时间】:2021-06-28 06:50:27
【问题描述】:

我目前正在制作一个基于 CoreData 的食谱应用程序,其中有属于某个类别的类别和食谱。 我的问题是我不知道如何只获取正确的食谱。例如,当按下“意大利面食”时,你会转到一个包含所有意大利面食食谱的 vc。

我已成功获取类别的数据,并将数据传递到 recipeVC。但我不知道如何正确查询。我试过这个:

    var category: Category!
    
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    func fetchAndSetResults() {

        do {
            let request = Recipe.fetchRequest() as NSFetchRequest<Recipe>
            let pred = NSPredicate(format: "category CONTAINS %@", category.name!)
            request.predicate = pred
            self.recipes = try context.fetch(request)
        } catch let err as NSError {
            print(err.localizedDescription)
            
        }
    }

在类别VC中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "ToRecipes" {
            if let destination = segue.destination as? RecipeVC {
                destination.category = selectedCategory
            }
        }
    }

在我的食谱实体中,我有一个属性“类别”:字符串

谢谢!

【问题讨论】:

  • 您是否在 2 个实体之间建立了关系?
  • 不,我没有。这是这样做的方法吗?如果是这样 - 如何? :) @JoakimDanielson
  • 这是一件非常常见的事情,也是您作为 Core Data 开发人员应该知道的一部分。幸运的是,找到有关该主题的教程和文章应该没有问题。一旦你研究并实现了它们,你就可以跳过整个 fetch 请求和谓词,只需执行类似于 self.recipes = category.recipes 的操作
  • 是的,我阅读了文档,并成功地在两者之间建立了关系。当我输入您的代码时,它显示无法分配“配方?”类型的值输入“[食谱]”我该如何解决这个问题? @JoakimDanielson 谢谢
  • 听起来像你。从类别到配方有一对一的关系,我认为它应该是一对多的关系

标签: ios swift xcode core-data


【解决方案1】:

在@JoakinDanielson 的帮助和一些研究下,我找到了解决方案。 我习惯使用 Firebase,所以 CoreData 对我来说是新的。
首先,我创建了两个实体之间的反向关系。 然后我将关系类型更改为“To Many” 然后在我更改的类别扩展中

@NSManaged public var recipes: NSSet?

 @NSManaged public var recipes: [Recipe]?

那么当用户在创建食谱时这段代码

  category.addToRecipes(recipe)

现在配方已创建并属于所选类别。

现在要做的就是填充您的 tableview - 这段代码

 self.recipes = category.recipes ?? [Recipe]()

这至少对我有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多