我正在用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)")
- }
- }
当我跑:
- Contact.execute()
那么编译器会抛出这个错误:
- fatal error: NSArray element Failed to match the Swift Array Element type
当我尝试从数组中获取值时:
- let firstContact = result[0] as Contact
我猜问题在executeFetchRequest.在Objective-c上,executeFetchRequest的返回类型是NSArray.现在在Swift上,返回类型是[AnyObject]?
我试图投掷[AnyObject]?结果NSArray,但Xcode说:
- Cannot convert the expression's type '[AnyObject]?' to type 'NSArray'
我做错了什么?
我在用着:
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)")
- }
UPDATE2:
———–
当使用您的NSManagedObject类未实现实体实例时,会出现这种问题.有几个不同的原因为什么会这样,所有这些都集中在“核心数据找不到在该数据模型中的类行上为该实体指定的类”.
可能性之中:
– 您为Swift类指定了错误的包
– 你忘了指定课程
– 你拼错了名字
在我的情况下,我忘了在她的答案中将班级指定为POB表演.