2016-08-07 6 views
1

私のアプリでUIDatePickerを使用しています。日付がなく時間を選択し、その値をCoreDataに保存しています。しかし、私のコードでdatePicked.datedatePickedUIDatePicker)を使用すると、日付の値も格納されます。私はNSDateFormatterを使用してHH:mm aフォーマットを保存することができますが、私は自分のデータモデルに文字列を保存したくありません。 dateFromStringを保存して、時間を必要な形式で保存しても、デフォルトの日付が時間と共に追加されます。どうすれば日付なしで時間を保存することができますか教えてください。どんな助けもありがとう。SwiftのUIDatePickerを使用して日付コンポーネントを持たないCoreDataに時間のみを保存するにはどうすればよいですか?

+0

NSDateとして保存し、取得する場合は、 "HH:mm a"形式のNSDateFormaterを使用してtimeStringを取得します。また、NSDateCoponentsを使用して、NSDateオブジェクトから時間、分などを分割することもできます。 –

+0

あなたは日付オブジェクトの代わりにtimeIntervalSince1970を保存できますか、時間間隔をあまり保存したくない場合もありますか? –

+0

日付部分を常に固定値(2000-01-01)に設定すると、並べ替えや比較が混乱することはありません。 – zisoft

答えて

1


変換可能な値をコアデータに保存することができます。このクラスのよう:

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 
} 
} 

あなたは、このように変形属性を追加する必要があります enter image description here そして、あなたはモデルファイルでこれを取得します:

extension Entity { 

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

} 

そして今、あなたは管理対象オブジェクトにTimeを保存することができます。

+0

CoreDataモデルでこれらの値を1回限りの値として保存する方法を教えてください。 –

+0

@RajaRupinderSingh私の答えを更新しました。 – Lumialxk

+0

私はあなたのアプローチを見ることができるので、データモデルに保存する前に時間が秒に変換されています。しかし、私はまた、時間に基づいて地元の通知を発する必要があります。したがって、通知を正しく実行するには、Am/Pmパラメータも必要です。 Am/Pmの値を時間とともに保存することは可能ですか、それとも文字列として格納してから、stringの格納された値と比較する必要がありますか? –

関連する問題