executeFetchRequest抛出致命错误:NSArray元素无法匹配Swift数组元素类型

Seb*_*ian 15 arrays collections core-data ios swift

我正在使用CoreData测试swift,我创建了以下代码:

import UIKit
import CoreData

class Contact: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var email: String

    class func execute(){
        let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
        let context:NSManagedObjectContext = appDel.managedObjectContext!

        let entityDescripition = NSEntityDescription.entityForName("Contact", inManagedObjectContext: context)
        let contact = Contact(entity: entityDescripition!, insertIntoManagedObjectContext: context)

        contact.name = "john Apleesee"
        contact.email = "john@apple.com"

        context.save(nil)

        let fetch:NSFetchRequest = NSFetchRequest(entityName: "Contact")
        var result = context.executeFetchRequest(fetch, error: nil) as [Contact]

        let firstContact = result[0] as Contact  //  <<-- error !

        println("\(firstContact.name)")
        println("\(firstContact.email)")

    }

}
Run Code Online (Sandbox Code Playgroud)

当我跑:

Contact.execute()
Run Code Online (Sandbox Code Playgroud)

然后编译器抛出此错误:

fatal error: NSArray element failed to match the Swift Array Element type
Run Code Online (Sandbox Code Playgroud)

当我尝试从数组中获取值时:

 let firstContact = result[0] as Contact
Run Code Online (Sandbox Code Playgroud)

我想问题出在了executeFetchRequest.在Objective-c上,返回类型executeFetchRequest是a NSArray.现在在Swift上,返回类型是一个[AnyObject]?.

我试图将[AnyObject]?结果转换为NSArray,但Xcode说:

 Cannot convert the expression's type '[AnyObject]?' to type 'NSArray' 
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

我正在使用:Xcode 6.0(6A313)GM和OSX 10.9.4

更新:
-----------

如果我将executeFetchRequest结果作为可选数组使用[NSManagedObject]而不是使用[Contact]它.

if let result: [NSManagedObject]? = context.executeFetchRequest(fetch, error: nil) as? [NSManagedObject] {

        let firstContact: NSManagedObject = result![0]

        let name = firstContact.valueForKey("name") as String
        let email = firstContact.valueForKey("email") as String

        println("\(name)")
        println("\(email)")
    }
Run Code Online (Sandbox Code Playgroud)

Update2:
-----------

当使用NSManagedObject类未加载实体实例时,会发生此类问题.发生这种情况的原因有几个,所有这些都集中在"核心数据无法找到您在数据模型中的类行上为该实体指定的类".

在这些可能性中:
- 你为Swift类指定了错误的包
- 你忘了指定类
- 你拼错了名字

在我的情况下,我忘记在她的答案中指定课程作为POB显示.

Ima*_*tit 33

我能够在控制台中重现您的错误消息.您收到此消息是因为未在Core Data Model Editor中正确设置实体类名称(请参见下图).

在此输入图像描述

完成后,您将能够将原始代码与ContactsubClass 一起使用.您可以在此处了解有关Core Data和名称空间的更多信息.

  • 在该类字段中,我无法添加“。” (3认同)

Dan*_*boz 6

就我而言,我将模块更改为核心数据模型编辑器中的"当前产品模块".它开始正常工作.

在此输入图像描述