我是CoreData的新手,已经阅读了一些教程但空手而归。大多数教程都集中在从CoreData获取以填充tableview,这不是我目前所做的。
以下是我在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
等内容。我知道我也没有正确地获取最后一项,我只是试图首先在对象上打印出属性。
我非常喜欢如何获取最新的对象以及显示它的属性
谢谢!
答案 0 :(得分:18)
首先,创建一个" Meditation.swift"在Xcode中使用"编辑器 - >创建NSManagedObject 子类......"。生成的文件应该类似于
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
// ...
然后objects
数组最多包含一个对象,这是最新的对象。