Ich verwende UIDatePicker
in meiner App, um Zeit ohne Datum auszuwählen und seinen Wert in CoreData
zu speichern. Aber der Datumswert wird auch gespeichert, wenn ich datePicked.date
(ist UIDatePicker
) in meinem Code verwende. Ich weiß, dass ich NSDateFormatter
verwenden kann, um HH:mm a
Format zu speichern, aber ich möchte Zeichenfolge in meinem Datenmodell nicht speichern. Selbst wenn ich die Funktion dateFromString
speichere, um Zeit im erforderlichen Format zu speichern, wird das Standarddatum mit der Zeit hinzugefügt. Bitte sagen Sie mir, wie ich nur Zeit ohne Datum speichern kann. Jede Hilfe wird geschätzt.Wie speichert man nur die Zeit in CoreData ohne Datumskomponente mit UIDatePicker in Swift?
Antwort
Aktualisiert
Sie können transformierbare Werte in Core Data speichern. Wie dieser Klasse:
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
}
}
sollten Sie umwandelbar hinzufügen Attribut wie folgt aus: Und Sie werden diese Datei im Modell erhalten:
extension Entity {
@NSManaged var time: Time? // modify it to Time manually
}
Und jetzt können Sie Time
auf verwaltete Objekt speichern.
Können Sie mir bitte sagen, wie kann ich diese Werte als einzelnen Zeitwert im CoreData-Modell speichern? –
@RajaRupinderSingh Meine Antwort wurde aktualisiert. – Lumialxk
Wie ich Ihren Ansatz sehen kann, wird die Zeit in Sekunden umgewandelt, bevor sie im Datenmodell gespeichert werden. Ich muss jedoch auch eine lokale Benachrichtigung basierend auf Zeit auslösen. Also brauche ich auch Am/Pm-Parameter, um die Benachrichtigung korrekt auszulösen. Ist es möglich, Am/Pm-Wert mit der Zeit zu speichern oder muss ich es als String speichern und dann einen Vergleich mit dem gespeicherten Wert von String machen? –
Speichern Sie es als NSDate, und wenn Sie es abrufen möchten, verwenden Sie NSDateFormater mit einem Format "HH: mm a", um timeString zu erhalten. Sie können auch NSDateCoponents verwenden, um Stunden, Minuten usw. vom NSDate-Objekt zu trennen. –
können Sie timeIntervalSince1970 anstelle von date-objekt speichern oder gar nicht speichern? –
Setzen Sie den Datumsteil immer auf einen festen Wert, d. H. 2000-01-01, damit Ihre Sortierung oder der Vergleich nicht gestört wird. – zisoft