将 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 的结果直接返回到类中的主要内容,如果未能解决你的问题,请参考以下文章

如何将结构移动到类中?

java中如何把一个图片转换成二进制流存入到类中啊?

将装饰器附加到类中的所有函数

如何将对象添加到类中的静态向量

使用装饰器动态地将方法添加到类中

Kivy,Python3.5 - 将用户文本输入绑定到类中的方法