Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用Swift中的UIDatePicker在CoreData中只存储时间而不存储日期组件?_Ios_Swift_Core Data_Nsdate_Uidatepicker - Fatal编程技术网

Ios 如何使用Swift中的UIDatePicker在CoreData中只存储时间而不存储日期组件?

Ios 如何使用Swift中的UIDatePicker在CoreData中只存储时间而不存储日期组件?,ios,swift,core-data,nsdate,uidatepicker,Ios,Swift,Core Data,Nsdate,Uidatepicker,我在我的应用程序中使用UIDatePicker选择没有日期的时间,并将其值存储在CoreData中。但是,如果我在代码中使用datepicker.date(datepicke是UIDatePicker),也会存储日期值。我知道我可以使用NSDateFormatter存储HH:mm a格式,但我不想在数据模型中存储字符串。即使我将dateFromString函数存储为所需格式的时间,默认日期也会随时间一起添加。请告诉我如何只存储时间而不存储日期。任何帮助都将不胜感激。更新 您可以在核心数据中保存可

我在我的应用程序中使用
UIDatePicker
选择没有日期的时间,并将其值存储在
CoreData
中。但是,如果我在代码中使用
datepicker.date
datepicke
UIDatePicker
),也会存储日期值。我知道我可以使用
NSDateFormatter
存储
HH:mm a
格式,但我不想在数据模型中存储字符串。即使我将
dateFromString
函数存储为所需格式的时间,默认日期也会随时间一起添加。请告诉我如何只存储时间而不存储日期。任何帮助都将不胜感激。

更新 您可以在核心数据中保存可转换的值。像这个班:

class Time: NSValueTransformer {
let hour: Int
let minute: Int
let second: Int

override init() { // only sample code
    hour = 0
    minute = 0
    second = 0
}

override class func transformedValueClass() -> AnyClass {
    return NSNumber.self
}

override func reverseTransformedValue(value: AnyObject?) -> AnyObject? {
    guard let number = value as? NSNumber else {
        return nil
    }
    return Time() // you should init Time from the number
}

override func transformedValue(value: AnyObject?) -> AnyObject? {
    let number = hour * 60 * 60 + minute * 60 + second
    return number
}

override class func allowsReverseTransformation() -> Bool {
    return true
}
}
您应该像这样添加可转换属性: 您将在模型文件中得到:

extension Entity {

    @NSManaged var time: Time? // modify it to Time manually

}

现在,您可以将时间保存到托管对象。

将其保存为NSDate,并在需要检索时使用格式为“HH:mm a”的NSDATEFormator获取时间字符串。您也可以使用NSDateCoponents从NSDate对象分割小时、分钟等。您是否可以保存timeIntervalSince1970而不是date对象,或者您甚至不想保存时间间隔?请将日期部分始终设置为固定值,即2000-01-01,这样就不会影响排序或比较。谢谢您的建议。我知道这里建议的所有选择。但我真的很惊讶地知道,我们不能在数据模型中只存储时间而不存储日期作为NSDate。应该有办法做到这一点。你能告诉我如何将这些值作为单个时间值存储在CoreData模型中吗?@RajaRupinderSingh更新了我的答案。正如我看到的,在保存到数据模型之前,时间被转换为秒。但是,我还需要根据时间发出本地通知。因此,我还需要Am/Pm参数来正确触发通知。是否可以随时间存储Am/Pm值,或者我必须将其存储为字符串,然后与存储的字符串值进行比较?@RajaRupinderSingh您可以添加字符串并将其存储到NSData。这只是示例代码。