将 CoreData 的结果直接返回到类中
Posted
技术标签:
【中文标题】将 CoreData 的结果直接返回到类中【英文标题】:Return Results from CoreData directly into Class 【发布时间】:2014-11-15 20:24:03 【问题描述】:我是 Swift 和 ios 开发的新手。这可能是我的一个简单的误解。
我正在使用核心数据。我的实体中有四个属性: “标题”类型字符串 “经度”、“纬度”类型十进制 “时间戳”类型日期
在下面的代码中,我收到错误“'[Locations]' is not convertible to '()'”。
import UIKit
import CoreData
@objc(Locations)
class Locations: NSManagedObject
@NSManaged var title:String
@NSManaged var longitude:Double
@NSManaged var latitude:Double
@NSManaged var timestamp:NSDate
class func getAllLocations()
let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
let context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Locations")
request.returnsObjectsAsFaults = false
var results:NSArray = context.executeFetchRequest(request, error: nil)!
return results as [Locations]
【问题讨论】:
我发现的大多数关于 CoreData 的教程都对建议循环遍历结果并使用 'if let 'title'= result.valueForKey...其他人请与 CoreData 接口。 【参考方案1】:编译器报错是因为你没有为你的函数指定一个返回类型, 应该是
class func getAllLocations() -> [Locations] ...
还有一些不必要的类型注解,所有的对象都可以 声明为常量:
class func getAllLocations() -> [Locations]
let appDel = (UIApplication.sharedApplication().delegate as AppDelegate)
let context = appDel.managedObjectContext!
let request = NSFetchRequest(entityName: "Locations")
request.returnsObjectsAsFaults = false
let results = context.executeFetchRequest(request, error: nil)!
return results as [Locations]
还要注意
let results = context.executeFetchRequest(request, error: nil)!
如果执行获取请求失败,将抛出运行时异常。 您应该使用可选绑定和一些错误处理或回退, 例如
if let results = context.executeFetchRequest(request, error: nil) as? [Locations]
return results
else
// Failed, return empty list. (Alternatively, report error.)
return []
【讨论】:
@jackreichert:不客气。 – 顺便说一句,对于“十进制”属性,@NSManaged var longitude:Double
应该是 @NSManaged var longitude: NSDecimalNumber
。你让 Xcode 创建托管对象子类了吗?
啊,谢谢。我没有,我自己创造的。我试图找到比基本教程建议的更好的 CoreData 管理。并在 github 的代码示例中看到了类似的内容。以上是关于将 CoreData 的结果直接返回到类中的主要内容,如果未能解决你的问题,请参考以下文章