将 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 和/或保存在相同的核心数据属性中

核心数据 - NSDate 属性在持久存储中发生变化

NSSortDescriptor 使用实体的 NSDate 属性(Swift)

无法将 NSDate 从 Parse 存储到 Core Data

作为获取谓词的日期范围 - 核心数据之间的 NSDate 谓词