ios – executeFetchRequest抛出致命错误:NSArray元素无法匹配Swift Array Element类型

前端之家收集整理的这篇文章主要介绍了ios – executeFetchRequest抛出致命错误:NSArray元素无法匹配Swift Array Element类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在用CoreData测试 swift,我创建了以下代码
  1. import UIKit
  2. import CoreData
  3.  
  4. class Contact: NSManagedObject {
  5.  
  6. @NSManaged var name: String
  7. @NSManaged var email: String
  8.  
  9. class func execute(){
  10. let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
  11. let context:NSManagedObjectContext = appDel.managedObjectContext!
  12.  
  13. let entityDescripition = NSEntityDescription.entityForName("Contact",inManagedObjectContext: context)
  14. let contact = Contact(entity: entityDescripition!,insertIntoManagedObjectContext: context)
  15.  
  16. contact.name = "john Apleesee"
  17. contact.email = "john@apple.com"
  18.  
  19. context.save(nil)
  20.  
  21. let fetch:NSFetchRequest = NSFetchRequest(entityName: "Contact")
  22. var result = context.executeFetchRequest(fetch,error: nil) as [Contact]
  23.  
  24. let firstContact = result[0] as Contact // <<-- error !
  25.  
  26. println("\(firstContact.name)")
  27. println("\(firstContact.email)")
  28.  
  29. }
  30.  
  31. }

当我跑:

  1. Contact.execute()

那么编译器会抛出这个错误

  1. fatal error: NSArray element Failed to match the Swift Array Element type

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

  1. let firstContact = result[0] as Contact

我猜问题在executeFetchRequest.在Objective-c上,executeFetchRequest的返回类型是NSArray.现在在Swift上,返回类型是[AnyObject]?

我试图投掷[AnyObject]?结果NSArray,但Xcode说:

  1. Cannot convert the expression's type '[AnyObject]?' to type 'NSArray'

我做错了什么?

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

更新:
———–

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

  1. if let result: [NSManagedObject]? = context.executeFetchRequest(fetch,error: nil) as? [NSManagedObject] {
  2.  
  3. let firstContact: NSManagedObject = result![0]
  4.  
  5. let name = firstContact.valueForKey("name") as String
  6. let email = firstContact.valueForKey("email") as String
  7.  
  8. println("\(name)")
  9. println("\(email)")
  10. }

UPDATE2:
———–

当使用您的NSManagedObject类未实现实体实例时,会出现这种问题.有几个不同的原因为什么会这样,所有这些都集中在“核心数据找不到在该数据模型中的类行上为该实体指定的类”.

可能性之中:
– 您为Swift类指定了错误的包
– 你忘了指定课程
– 你拼错了名字

在我的情况下,我忘了在她的答案中将班级指定为POB表演.

解决方法

我能够在控制台中重现错误信息.您收到此消息,因为您没有正确设置您的实体类名称在核心数据模型编辑器(见下图).

一旦完成,您将能够使用您的原始代码与Contact子类.您可以了解有关Core Data和命名空间here的更多信息.

猜你在找的iOS相关文章