2012-07-10 14 views
5

Veri modelinden NSManagedObject alt sınıf dosyası oluşturulduğunda, Çekirdek Veriler, dize türü sütunlar için NSString (nonatomic, retain) türünde özellikler oluşturur. Performans değerlendirmesi nedeniyle yapılabilir, ancak, çekirdek verileri NSManagedObject alt sınıflarının model sınıflarından ayrıldığı Veri Eşleyici şablonunu uyguluyorum. Bu nedenle, model sınıflarını çekirdek verisi NSManagedObject alt sınıfına dönüştürürken, yalnızca bir işaretçi değil, bir kopya atar. Mimari açıdan bakıldığında, çekirdek veri erişimi ve model sınıfları arasındaki mantıksal ayrımı frenler, bu yüzden saklamak yerine kopya kullanmam gerekir.NSManagedObject NSString özellikleri "tutma" yerine "kopyalama" ile nasıl yapılır?

Tek yapmanız gereken, NSManagedObject alt sınıflarındaki özellikleri değiştirmek için el ile mi?

+0

Sadece bunun farkında değilsiniz - normal (değiştirilemeyen) '' NSString' '' kopyalama 'yöntemi aynı örneği döndürür, bu nedenle kopyalama özelliğinizden korkma test ettiğinde. – Monolo

+0

Evet, bunun farkındayım, zaten test edilmiş. "Kopyala" sadece değiştirilebilir tip nesnelerini kopyalar. Ayrıca, dikkat çekici olan "copy" özelliği de kopyalama mesajlarını NSArray öğelerine gönderir, böylece dizinin içinde mevcutsa değiştirilebilir dizeler kopyalanacaktır. – Centurion

+0

Lütfen, cevabın altındaki yorumuma bakın. Bugün, pratik kullanım "kopya" özelliklerini anlamaya çalıştım. Nasıl çalıştığını anlıyorum, NSMutableString'i kullanmaya hiç gerek yoktu, bu yüzden deneyimimi kopyalamak gereksiz ve sadece gelecekteki koruma için. – Centurion

cevap

4

Bunu yapmanın tek yolu, mülkün bir NSManagedObject alt sınıfında bildirimini değiştirmektir. Neyse ki, Çekirdek Veriler daha sonra otomatik olarak geri kalanı işliyor.

+0

Geliştirme işlemi sırasında bazı varlıkların çekirdek veri modeli şemasında değişmesi çok olasıdır; bu nedenle, NSManagedObjects düzenlenmesi, düzenlenmiş özelliklerin "elde tutulması" için üzerine yazılmasına neden olur. Yani, biraz rahatsızlık. – Centurion

+0

Ayrıca, düşüncelerimi "kopyalama" özellikleriyle paylaşmak istiyorum. Özellikler, NSMutableString özelliğinin değerini dışarıdan değiştirmeyi engeller. Değiştirilebilir NSNumber ve NSDate yok, bu nedenle "copy" sadece dizeleri etkiler. Ancak, iOS uygulama geliştirmenin ikinci yılına göre, NSMutableString'i kullanmaya hiç ihtiyacım olmadı, bu nedenle "kopyalama" durumu çok nadirdir IMHO :) Apple, örneklerinde NSString özelliklerinde kopya kullanmaya teşvik ediyor, ancak "sakla" özelliğini kullanıyor diziler, sözlükler ve kümeler, aynı üzerine yazma durumu mevcut olsa da (sorunun altındaki ilk yorumuma bakın). Bir kuralın eksikliği ... – Centurion

+1

@centurion deneyin mogenerator. Kodunuzu oluşturulmuş sınıfa ve bunun bir alt sınıfına ayırır; Alt sınıfın üzerine yazılmadan değişiklik yapamazsınız. –