我正在尝试访问存储在coredata中的NSDate变量作为AnyObject并打印当天。当我打印它时,它返回nil。当我在没有.day的情况下打印日期后,它会打印正确的值。 编辑:workoutDate是实体'Workout'的属性,类型为'Date'
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
do {
let request = NSFetchRequest(entityName: "Workout")
let results = try context.executeFetchRequest(request)
if results.count > 0 {
for item in results as! [Workout]{
let time = item.valueForKey("workoutTime")
let currentWorkoutDate = item.valueForKey("workoutDate")
let workoutDateDay = currentWorkoutDate!
print(workoutDateDay)
print(workoutDateDay.day!)
答案 0 :(得分:2)
NSDate
没有day
属性。但是,键值编码方法
let currentWorkoutDate = item.valueForKey("workoutDate")
返回AnyObject?
,您可以在该对象上调用任何(现有)Objective-C方法
(比较The strange behaviour of Swift's AnyObject)。编译器没有抱怨,因为day
是NSDateComponents
的属性。但在运行时,它被检测到
该对象不响应此属性,因此
workoutDateDay.day
为nil
。
解决方案是将值转换为NSDate
对象:
if let workoutDate = item.valueForKey("workoutDate") as? NSDate {
// ...
}
或更好,为实体创建一个NSManagedObject
子类
并使用属性访问器。
然后使用NSCalender
方法从中获取NSDateComponents
日期,例如
if let workoutDate = item.valueForKey("workoutDate") as? NSDate {
let day = NSCalendar.currentCalendar().component(.Day, fromDate: workoutDate)
print(day)
// ...
}
答案 1 :(得分:1)
CoreData返回NSDate
,其中没有方法day
。
所以,如果你添加了它,你的问题就在于该方法。