我已经成功地在一个新的基于Swift的应用程序(目前是XCode 6 beta 3)中设置了一个RestKit到CoreData的映射实现.我知道导入映射正在使用我的RestKit JSON调用,因为我可以检查sqlite数据库并查看我的数据.但是,我无法在NSFetchRequest中将数据从数据存储中取出.我究竟做错了什么?
我将保留所有RestKit设置和拆卸,因为它非常标准,似乎工作得很好.所以这是我的AppDelegate查询代码似乎不起作用:
var currentUser: User? {
if !_currentUser {
var error: NSError? = nil
let request = NSFetchRequest(entityName: "User")
let recordCount = self.managedObjectContext.countForFetchRequest(request, error:&error)
NSLog("user records found: \(recordCount)")
var result = self.managedObjectContext.executeFetchRequest(request, error:&error)
for resultItem : AnyObject in result {
_currentUser = resultItem as? User
if _currentUser {
NSLog("Fetched User for \(_currentUser!.firstname) \(_currentUser!.lastname)")
}
}
}
return _currentUser;
}
Run Code Online (Sandbox Code Playgroud)
self.managedObjectContext从我的AppDelegate引用它来从RestKit shareObject获取上下文:
var managedObjectContext: NSManagedObjectContext {
return RKObjectManager.sharedManager().managedObjectStore.mainQueueManagedObjectContext
}
Run Code Online (Sandbox Code Playgroud)
似乎提取请求成功,因为for/in循环中出现断点.但是,当我检查resultItem或_currentUser对象时,它们显示为空,并且"if _currentUser"NSLog永远不会触发.
有任何想法吗?我是否对在Swift中恢复数据做出了错误的假设?
编辑2:
问题源于我尝试将resultItem置于Optional中.如果声明_currentUser没有可选项并删除as?可选的强制转换查询返回一个合适的User对象:
for resultItem : …Run Code Online (Sandbox Code Playgroud)