核心数据 – 从Swift的CoreData获取最新的项目

我是CoreData的新手,已经阅读了几个教程,但空手而归.大多数教程都集中在从CoreData中获取,以填充一个表视图,这不是我现在所做的.

以下是我在CoreData中设置数据的方式.所有类型均为Double,但日期为NSDate

let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

let managedObjectContext = appDelegate.managedObjectContext
let entityDescription = NSEntityDescription.entityForName("Meditation",inManagedObjectContext: managedObjectContext!)
let meditation = NSManagedObject(entity: entityDescription!,insertIntoManagedObjectContext: managedObjectContext!)

meditation.setValue(settings.minutes,forKey: "length")
meditation.setValue(settings.warmup,forKey: "warmup")
meditation.setValue(settings.cooldown,forKey: "cooldown")
meditation.setValue(NSDate(),forKey: "date")

// fetch stuff from CoreData
var request = NSFetchRequest(entityName: "Meditation")
var error:NSError? = nil
var results:NSArray = managedObjectContext!.executeFetchRequest(request,error: &error)!

for res in results {
    println(res)
}

这是我要做的结果,但我无法访问像.minutes,.date等等.我知道我也没有正确得到最后一个项目,我只是想首先打印对象上的属性.

我希望如何获取最近的对象以及显示它的属性的帮助

谢谢!

首先,使用“编辑器 – >创建NSManagedObject在Xcode中创建一个”Meditation.swift“文件
子类…“.生成的文件应该是这样的
import Foundation
import CoreData

class Meditation: NSManagedObject {

    @NSManaged var length: NSNumber
    @NSManaged var warmup: NSNumber
    @NSManaged var cooldown: NSNumber
    @NSManaged var date: NSDate

}

现在您可以直接使用属性而不是键值编码
并创建对象

let meditation = NSEntityDescription.insertNewObjectForEntityForName("Meditation",inManagedObjectContext: managedObjectContext) as Meditation
meditation.length = ...
meditation.warmup = ...
meditation.cooldown = ...
meditation.date = NSDate()

var error : NSError?
if !managedObjectContext.save(&error) {
    println("save failed: \(error?.localizedDescription)")
}

获取对象时,转换结果
executeFetchRequest()到[Meditation]:

let request = NSFetchRequest(entityName: "Meditation")

var error : NSError?
let result = managedObjectContext.executeFetchRequest(request,error: &error)
if let objects = result as? [Meditation] {
    for meditation in objects {
        println(meditation.length)
        println(meditation.date)
        // ...
    }
} else {
    println("fetch failed: \(error?.localizedDescription)")
}

最后,要只获取最新的对象,请添加一个排序描述符
按照日期按降序对结果进行排序,并将结果数限制为一个:

let request = NSFetchRequest(entityName: "Meditation")
request.sortDescriptors = [NSSortDescriptor(key: "date",ascending: false)]
request.fetchLimit = 1
// ...

那么对象数组最多只包含一个对象,它是最近的一个对象.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...