2016-09-29 42 views
11

Veritabanı modelimde çok fazla tarih alanına sahibim. CoreData, "Scalar Type Kullan" seçeneğine bağlı olarak tarihleri ​​kaydetmek için NSDate veya TimeInterval'ı kullanmanıza izin verir. Ben Date nesneler olarak tarih kullanmak istiyorum çünküSwiftData Tarihini CoreData ile Kullan

enter image description here

Ancak bu iki seçenek benim için kötü. NSDate dolaylı olarak Date'a dönüştürülemediğinden, değerleri Date'a çevirmek/dönüştürmek veya NSManagedObject sınıflarımda çok sayıda özel ayarlayıcı/alıcıyı uygulamak zorundayım.

ValueTransformer kullanmayı denedim, ancak Date gibi @ obj sınıfları ile çalışmaz.

Bu nedenle, Date değerlerini kaydetme ve CoreData'dan almak için basit bir yol var mı?

cevap

25

Evet, ama beğenmeyebilirsiniz. Bir Çekirdek Verileri "Tarih" özelliğini kullanarak bildirirseniz, ve yazın, Xcode sizin için NSManagedObject alt sınıfını oluştursun, özellik NSDate türünde bir özellik olacaktır. Anladığınız gibi, Date vs NSDate ile uğraşmak zorunda kalacaksınız.

yapmanız Değilse Xcode, sen Çekirdek Verileri "tarih" ilan edebilir mülkiyet olarak bir şey

gibi ("Manüel/Yok" Xcode 8 sette "Codegen") sizin için alt sınıfını oluşturmasına izin
@NSManaged public var timestamp: Date? 

Sadece çalışır. Date değerlerini okuyabilir ve yazabilir ve Çekirdek Veriler doğru olanı yapar. Ancak, NSManagedObject alt sınıfındaki koddan tamamen sorumlu olursunuz. Bütün sınıfı yaratmanız gerekecek. Çekirdek Veri modelini güncellerseniz, sınıfı da güncellemeniz gerekir. Bunun işe yarayıp yaramadığı size bağlı, ancak şu anda var olan tek çözüm.

Güncelleştirmesi: Xcode 9'da, oluşturulan kod Date kullanır, bu nedenle artık gerekli olmamalıdır.

+1

O Xcode 8. Dosya, Apple ile bir geliştirme isteği tek yol, ve belki de gelecekteki bir güncelleştirme olarak alırsınız. –

+0

CoreData hakkında bir kitap yazdığınızı fark ettim. Yani başka bir çözüm beklemek için bir anlamı yok gibi görünüyor :) Bir kez daha teşekkürler. – Avt

+4

"Codegen" 'i "Manual/None" olarak ayarlama seçeneğine ne dersiniz? Bunun yerine, tüm sınıfı kendiniz oluşturmak yerine, soldaki modelinizi seçerek ve "Editor -> Create NSManagedObjectSubclass" seçeneğini seçerek menüden seçim yapabilirsiniz? Hangisi sizin için sınıf oluşturur, o zaman yapmanız gereken tek şey NSDate'in Tarihini değiştirmektir. Modeli her güncellediğinizde bunu yapmanız gerekir. – oyalhi

3

Burada dönüştürülebilir olarak ayarlandıysanız ve özel sınıfını Date olarak ayarlarsanız işe yarayacak bir geçici çözüm vardır.

Transformable date