创建 CoreData 关系导致代码中出现 20 多个错误
Posted
技术标签:
【中文标题】创建 CoreData 关系导致代码中出现 20 多个错误【英文标题】:Creating CoreData Relationship causes 20+ Errors in code 【发布时间】:2017-11-15 15:26:12 【问题描述】:所以过去几周我一直在努力尝试使用关系来将对象数组ingredient
分配给recipe
的单个类。我一直在看this video。现在,通过创建recipe
和ingredient
类的两个扩展,我的代码中出现了大量错误,特别是
(类结构)的无效使用
或
(类结构)的歧义使用
我在 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.swift
和 Ingredient+CoreDataClass.swift
。这也是您收到此错误的原因:
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
这个错误告诉你有几个同名的类。
因此,要么删除 Recipe
和 Ingredient
扩展名并让 Xcode 为你管理它们,要么你自己创建它们,但要正确。如果您想这样做,请按照以下步骤操作:https://***.com/a/40868074/5464989
在我手动创建这些文件后,您的应用似乎可以运行了。
【讨论】:
以上是关于创建 CoreData 关系导致代码中出现 20 多个错误的主要内容,如果未能解决你的问题,请参考以下文章
CoreData + CloudKit 支持的 App 在导出(export)新建托管对象时内存飙升导致被杀死的解决
CoreData多个NSPersistentContainer实例导致Multiple NSEntityDescriptions +entity unable disambiguate的解决
Core Data 中看似有效的对象出现“悬空引用无效对象”错误