Core Data NSTimeInterval using an accessor directly is buggy

后端 未结 2 1965
借酒劲吻你
借酒劲吻你 2020-12-19 15:36

I\'m setting an NSTimeInterval using setValueForKey within an NSManagedObject Subclass, the value gets set correctly, and is also correct when it is retrieved using valueFor

相关标签:
2条回答
  • 2020-12-19 16:04

    Assigning to self.valueForKey("dateLastSynced") won't work; it's not an lvalue. You need to use setValueForKey.

    Also, if the dateLastSynced is a date property, you cannot assign it a double value and expect it to work. Use

    self.setValue(NSDate(timeIntervalSinceReferenceDate: <value>), forKey:"dateLastSynced")
    
    0 讨论(0)
  • 2020-12-19 16:11

    A scalar property of type NSTimeInterval for a Core Data Date property represents the time in seconds since the reference date Jan 1, 2001. The Core Data generated accessor methods transparently convert between NSTimeInterval and NSDate.

    Therefore you set a value using the scalar accessor with

    obj.dateLastSynced = date.timeIntervalSinceReferenceDate
    

    and you retrieve the value with

    let date = NSDate(timeIntervalSinceReferenceDate: obj.dateLastSynced)
    

    This gives the same results as the Key-Value Coding methods

    // Set:
    obj.setValueForKey(date, "dateLastSynced")
    // Get:
    let date = obj.valueForKey("dateLastSynced")
    
    0 讨论(0)
提交回复
热议问题