Swift/CoreData:-[:]:发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】Swift/CoreData:-[:]:发送到实例的无法识别的选择器【英文标题】:Swift/CoreData: -[:]: unrecognized selector sent to instance 【发布时间】:2021-04-12 13:05:58 【问题描述】:

我有一个依赖 CoreData 的小型 ios 应用程序。 我目前有两个实体,“Product”和“StorageLocation”。 它们之间是一对多的关系。 我手动生成了类;模型编辑器也会显示正确的类名。

当尝试保存包含与“StorageLocation”关系的新“产品”时,我收到此错误:

-[StorageLocation addProductsObject:]:无法识别的选择器发送到实例 0x60000389d280"

生成的NSManagedObject类如下:

import Foundation
import CoreData


extension StorageLocation 

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


@NSManaged public var id: UUID?
@NSManaged public var name: String?
@NSManaged public var products: NSSet?



// MARK: Generated accessors for products
extension StorageLocation 

    @objc(addProductsObject:)
    @NSManaged public func addToProducts(_ value: Product)

    @objc(removeProductsObject:)
    @NSManaged public func removeFromProducts(_ value: Product)

    @objc(addProducts:)
    @NSManaged public func addToProducts(_ values: NSSet)

    @objc(removeProducts:)
    @NSManaged public func removeFromProducts(_ values: NSSet)



extension StorageLocation : Identifiable 


正如错误所说,问题是我这样调用的方法“addToProducts”:

let newItem = Product(context: viewContext)
        newItem.id = id
        newItem.name = name
        newItem.qty = Int32(actualQty)
        newItem.expDate = expDate
        location.addToProducts(newItem)

我还检查了模型是否与类匹配,没有发现错误。

有什么想法/提示吗?

谢谢 马可

【问题讨论】:

核心数据模型中两个实体之间的关系名称是什么? 这是我的模特:i.imgur.com/ZOtxjz0.png 呃?抱歉,我没有看到它们不匹配的地方 你还有文件 StoregaLocation+CodeDataClass.swift 吗? 我发布的是文件 StorageLocation+CoreDataProperties.swift 【参考方案1】:

很难确定,但由于您手动生成了文件,因此它可能没有被添加到应用程序目标中。这意味着代码存在但没有被编译为应用程序的一部分。试试这个:

    在窗口左侧的文件导航器中单击文件。 打开右侧的“文件检查器”选项卡。如果你按下 cmd-opt-1,就会得到这个。 查看显示“目标成员资格”的检查器。这应该列出应用和所有测试目标,以及应用扩展(如果有)。 确保在目标成员列表中选中您的应用名称。

如果它没有被检查,而你检查它,你的代码可能会工作。

【讨论】:

“不幸的是”,添加了目标会员;我列出并检查了我的应用程序。谢谢! 进一步调试后看到这个错误:#5 0x000000010c22e13a in closure #1 in AddView.addProduct(id:name:actualQty:expDate:location:) 进一步调试后看到这个错误

以上是关于Swift/CoreData:-[:]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

Swift3 CoreData - fetchResultsController

swift CoreData 谓词

iOS - Swift CoreData 中的 ManagedObjectContext 为零

在哪里放置 persistentStoreDescriptions ?在 Swift3 Coredata 样板堆栈

Swift CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。

Swift CoreData:显示特定数据的最佳方法?