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显示.
| 归档时间: |
|
| 查看次数: |
13659 次 |
| 最近记录: |