将 NSDate 存储在核心数据中(swift)
Posted
技术标签:
【中文标题】将 NSDate 存储在核心数据中(swift)【英文标题】:Storing NSDate in core data (swift) 【发布时间】:2015-07-21 16:52:50 【问题描述】:我是 swift 新手,我正在尝试理解其中的一部分。我一直在开发一个需要存储日期的应用程序,但我就是想不通。
任何输入都会很棒。
存储日期的代码
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context: NSManagedObjectContext = appDel.managedObjectContext!
// Users = Entity in core data
var newuser = NSEntityDescription.insertNewObjectForEntityForName("Users",inManagedObjectContext: context) as! NSManagedObject
// datetostore = attribute of type date
newuser.setValue(NSDate(), forKey: "datetostore")
context.save(nil)
从 Core Data 获取存储数据的代码
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context: NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Users")
var results: NSArray = context.executeFetchRequest(request, error: nil)!
var end: AnyObject = results[0]
var end2 = end as! NSObject
var end3 = end2 as! NSDate
请注意:我知道结尾并没有真正起作用,因为那是我得到错误的地方。
【问题讨论】:
提示:如果您查看setValue(_: forKey:)
的文档,您将找到从对象中检索值的相应方法。
【参考方案1】:
首先,您应该让 Xcode 生成 NSManagedObject
子类,这将允许更强的输入和更简洁的代码。它将生成一个类User
,其属性为datetostore
。
我建议不要使用诸如datetostore
之类的愚蠢名称。这显然是一个日期,很明显你正在存储它。因此,date
就足够了。
最后,从您的代码看来,您认为用户与日期相同,即使您自己刚刚调用setValueForKey
将日期作为属性添加到用户。想一想,然后按照 Martin R 的建议去做。
没有NSManagedObject
子类(不推荐):
let aDate = user.valueForKey("date")
使用子类:获取具有正确类型的实体。
let result = context.executeFetchRequest(request, error:nil) as! [User]
// check for empty array, then
let user = result.first
let aDate = user.date
【讨论】:
【参考方案2】:您应该第一次使用 Date 创建一个属性。 这是代码
let date = Date()
let dateformatter = DateFormatter()
dateformatter.format = "dd-MM-yyyy hh-mm-ss"
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext
let user = NSEntityDescription.insertNewObject(forEntityName: "Example", into: context)
user.setValue(date, forKey: "date")
appDelegate.saveContext()
【讨论】:
以上是关于将 NSDate 存储在核心数据中(swift)的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSDate 的核心数据排序描述符,使用 Swift 的 iOS
将 NSDate 和 NSNumber 和/或保存在相同的核心数据属性中
NSSortDescriptor 使用实体的 NSDate 属性(Swift)