NSFetchRequest as entityName 给出错误“使用未声明的类型”

Posted

技术标签:

【中文标题】NSFetchRequest as entityName 给出错误“使用未声明的类型”【英文标题】:NSFetchRequest as entityName gives error "use of undeclared type" 【发布时间】:2016-01-11 13:24:26 【问题描述】:

我在 Swift 2.1 和 Xcode 7.2 中使用 Core 数据 此代码给了我一个找不到实体名称的错误。这是因为 [Company] 不起作用。我有一个具有此名称的实体。

    let fetchRequest = NSFetchRequest(entityName: "Company")

    do 
        var result = try self.moc.executeFetchRequest(fetchRequest) as! [Company]
        if (result.count > 0)

        companyName?.stringValue = result[0].valueForKeyPath("name") as! String

        // success ...
        
        else

        
     catch let error as NSError 
        // failure
        print("Fetch failed: \(error.localizedDescription)")
    

【问题讨论】:

【参考方案1】:

添加到文件头:

import CoreData

【讨论】:

【参考方案2】:

您说您的模型中有一个名为“公司”的实体。好的,但是你有一个实际的名为CompanyNSManagedObject 类(即class Company: NSManagedObject ... ),是你在Xcode 的托管对象模型编辑器中创建的吗?这不是自动的。如果没有在某处声明实际类,它将是“未定义类型”,因为实体名称只是一个字符串,用于在您的模型中查找内容。

您的其余代码正在通过valueForKeyPath() 访问属性这一事实强烈表明在任何地方都没有实际的类Company: NSManagedObject

【讨论】:

为什么我应该有一个?Entity的目的正是为了避免这种情况?如果我没有我应该如何进行,而不是[Company]写[NSManagedObject]? 我认为您误解了一些基础知识。考虑一下类型安全的 Swift 语言如何可能接受一个字符串作为一个独特的类型并且知道关于该类型的任何信息。如果你不想要这个好处,是的,你只需要一个 NSManagedObject 数组。 为每个实体创建单独的类有什么好处? 请阅读文档:developer.apple.com/library/tvos/documentation/Cocoa/Conceptual/… 如果您的模型对象(实体实例)有自定义逻辑,这是必需的;否则,唯一的好处是易于使用强类型的 Swift 语言(即,您可以转换为 Company: NSManagedObject 类的数组并在没有字符串键的情况下访问属性。但仅此一项就巨大受益,因为它有助于避免许多仅在运行时出现的常见编程错误(即,它们会编译但不会正确运行)

以上是关于NSFetchRequest as entityName 给出错误“使用未声明的类型”的主要内容,如果未能解决你的问题,请参考以下文章

无法转换'NSFetchRequest类型的值 '到指定类型'NSFetchRequest “

NSFetchRequest 不适用于谓词

如何将类型应用于NSFetchRequest实例?

核心数据 - NSFetchRequest 问题

如何将类型应用于 NSFetchRequest 实例?

如何将类型应用于 NSFetchRequest 实例?