创建 CoreData 关系导致代码中出现 20 多个错误

Posted

技术标签:

【中文标题】创建 CoreData 关系导致代码中出现 20 多个错误【英文标题】:Creating CoreData Relationship causes 20+ Errors in code 【发布时间】:2017-11-15 15:26:12 【问题描述】:

所以过去几周我一直在努力尝试使用关系来将对象数组ingredient 分配给recipe 的单个类。我一直在看this video。现在,通过创建recipeingredient 类的两个扩展,我的代码中出现了大量错误,特别是

(类结构)的无效使用

(类结构)的歧义使用

我在 GitHub 上有一个 Git 存储库,如果需要,您可以诊断我的代码 here。

如果没有,这是我所做的扩展

食谱类:

import Foundation
import CoreData


extension Recipe 

@nonobjc public class func fetchRequest() -> NSFetchRequest<Recipe> 
    return NSFetchRequest<Recipe>(entityName: "Recipe")


@NSManaged public var ingredients: String?
@NSManaged public var instructions: String?
@NSManaged public var time: String?
@NSManaged public var title: String?
@NSManaged public var ingredient: [Ingredient]?



// MARK: Generated accessors for ingredient
extension Recipe 

@objc(addIngredientObject:)
@NSManaged public func addToIngredient(_ value: Ingredient)

@objc(removeIngredientObject:)
@NSManaged public func removeFromIngredient(_ value: Ingredient)

@objc(addIngredient:)
@NSManaged public func addToIngredient(_ values: NSSet)

@objc(removeIngredient:)
@NSManaged public func removeFromIngredient(_ values: NSSet)


以及成分类:

import Foundation
import CoreData


extension Ingredient 

@nonobjc public class func fetchRequest() -> NSFetchRequest<Ingredient>
    return NSFetchRequest<Ingredient>(entityName: "Ingredient")


@NSManaged public var cost: Double
@NSManaged public var name: String?
@NSManaged public var unit: String?
@NSManaged public var recipe: NSSet?



// MARK: Generated accessors for recipe
extension Ingredient 

@objc(addRecipeObject:)
@NSManaged public func addToRecipe(_ value: Recipe)

@objc(removeRecipeObject:)
@NSManaged public func removeFromRecipe(_ value: Recipe)

@objc(addRecipe:)
@NSManaged public func addToRecipe(_ values: NSSet)

@objc(removeRecipe:)
@NSManaged public func removeFromRecipe(_ values: NSSet)


【问题讨论】:

如果您包含导致这些错误的代码行示例,将会有所帮助。 【参考方案1】:

您必须决定是自己管理 CoreData 类文件还是让 Xcode 为您管理它们。即使您告诉 Xcode 管理它们,因为您已经创建了 Recipe+CoreDataClass.swiftIngredient+CoreDataClass.swift。这也是您收到此错误的原因:

 Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

这个错误告诉你有几个同名的类。

因此,要么删除 RecipeIngredient 扩展名并让 Xcode 为你管理它们,要么你自己创建它们,但要正确。如果您想这样做,请按照以下步骤操作:https://***.com/a/40868074/5464989

在我手动创建这些文件后,您的应用似乎可以运行了。

【讨论】:

以上是关于创建 CoreData 关系导致代码中出现 20 多个错误的主要内容,如果未能解决你的问题,请参考以下文章

CoreData + CloudKit 支持的 App 在导出(export)新建托管对象时内存飙升导致被杀死的解决

RestKit 一对多逆向关系(无CoreData)

CoreData多个NSPersistentContainer实例导致Multiple NSEntityDescriptions +entity unable disambiguate的解决

Core Data 中看似有效的对象出现“悬空引用无效对象”错误

CoreData:使用 NSPredicate 过滤一对多对多关系(此处不允许错误对多键)

获取 SwiftUI CoreData 关系