2016-08-07 24 views
1

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?

+0

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. –

+0

können Sie timeIntervalSince1970 anstelle von date-objekt speichern oder gar nicht speichern? –

+0

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

Antwort

1

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: enter image description here 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.

+0

Können Sie mir bitte sagen, wie kann ich diese Werte als einzelnen Zeitwert im CoreData-Modell speichern? –

+0

@RajaRupinderSingh Meine Antwort wurde aktualisiert. – Lumialxk

+0

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? –