2010-09-22 21 views

cevap

34

Modelde "şimdi" kullanabilirsiniz ama Çekirdek Veri derleme zamanında çalışma süresiyle değil değerlendirir ('CURRENTDATE' ya özelliğinin varsayılan değer bir şey? Girerek gibi). Ne istediğini muhtemelen değil modeliniz varsayılan saklanan derleme tarihi, alırsınız:

http://iphonedevelopment.blogspot.com/2009/07/core-data-default-dates-in-data-model.html

geçerli tarih varsayılan özellik değerini sağlamak için en güvenilir yolu içinde -awakeFromInsert geçersiz kılmaktır bir NSManagedObject alt sınıfı ve oradaki mevcut tarihi atayın.

- (void) awakeFromInsert 
{ 
    [super awakeFromInsert]; 
    self.date = [NSDate date]; 
    // or [self setPrimitiveDate:[NSDate date]]; 
    // to avoid triggering KVO notifications 

} 

Not: İç içe yönetilen nesne bağlamlarda (veya UIManagedDocument) yararlanarak ediyorsanız beklendiği gibi yukarıdaki çalışmaz. Bu tavsiye sadece tek yönetilen nesne bağlamları kullanıldığında geçerlidir.

+2

Bu doğru değil çünkü her zaman bir NSManagedObject oluşturulurken awakeForInsert çağrılır. Aynı CoreData varlığını temsil ederken, farklı iş parçacıklarında farklı NSManagedObject oluşturulabilir. – Kamchatka

+0

Aynı nesneyi temsil eden iki farklı iş parçacığında yönetilen bir nesne oluşturmak, Çekirdek Veri fiziğinin kurallarını ihlal eder. Ve kesinlikle bazı uygulama mantığı hatalarının bir göstergesi. Böyle bir şey yapmak tavsiye edilen bir uygulama değildir. –

+0

Yapabileceğine inanıyorum. İşte bir adil kullanım durumu: Ekran için ana iş parçacığında bir Core Data nesnesine sahip olabilirsiniz (bir "Photo" nesnesini söyleyelim) ve daha sonra veritabanından aynı nesneyi yükleyerek arka planda çalışan bir iş parçacığına sahip olabilirsiniz. Fotoğraf işleme, fotoğrafı kalıcı mağazaya geri kaydetme. Bu noktada, küresel bir değişiklik bildirimi alırsınız ve ana iş parçacığı, değişiklikleri ana iş parçacığı yönetilen nesne bağlamında birleştirmeye karar verebilir. – Kamchatka

İlgili konular