我是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)
}
Run Code Online (Sandbox Code Playgroud)
这里就是我想要做的就是结果,但我不能访问类的东西.minutes,.date等我知道我还不能正确得到最后一个项目或者,我只是想在打印出的属性首先是对象.
我非常喜欢如何获取最新的对象以及显示它的属性
谢谢!
Mar*_*n R 20
首先,使用"Editor - > Create NSManagedObject Subclass ..."在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
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以直接使用属性而不是键值编码,并将对象创建为
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)")
}
Run Code Online (Sandbox Code Playgroud)
获取对象时,将结果转换
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)")
}
Run Code Online (Sandbox Code Playgroud)
最后,要仅获取最新对象,请添加排序描述符以按日期降序对结果进行排序,并将结果数限制为一:
let request = NSFetchRequest(entityName: "Meditation")
request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]
request.fetchLimit = 1
// ...
Run Code Online (Sandbox Code Playgroud)
然后该objects数组最多包含一个对象,这是最新的对象.
| 归档时间: |
|
| 查看次数: |
10005 次 |
| 最近记录: |