斯威夫特:NSDate.day返回零

时间:2016-08-14 13:58:30

标签: ios swift

我正在尝试访问存储在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!)

2 个答案:

答案 0 :(得分:2)

NSDate没有day属性。但是,键值编码方法

let currentWorkoutDate = item.valueForKey("workoutDate")

返回AnyObject?,您可以在该对象上调用任何(现有)Objective-C方法 (比较The strange behaviour of Swift's AnyObject)。编译器没有抱怨,因为dayNSDateComponents的属性。但在运行时,它被检测到 该对象不响应此属性,因此 workoutDateDay.daynil

解决方案是将值转换为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。 所以,如果你添加了它,你的问题就在于该方法。