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
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")
                                                                        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")