Nasıl ya da başka bir bağlamdan bir NSManagedObject kopya taşırım?
Oldukça standart bir kurulum, hiç kaydedilmemiş (nesneler, Web'den indirdiğiniz bir sürü içeren) olan bir not defteri MOC ile olduğunu varsayıyorum ve nesnelerin devam ederse başka bir kalıcı MOC var. Kullanıcı scratchMOC bir nesne onu kitaplığa eklemek için seçtiğinde, istiyorum ya 1) permanentMOC, veya 2) scratchMOC ve eklemek nesneyi kaldırmak permanentMOC içine nesne kopyalayın. Core Data FAQ Bu gibi: bir nesnenin kopyasını verebilirim diyor
NSManagedObjectID *objectID = [managedObject objectID];
NSManagedObject *copy = [context2 objectWithID:objectID];
(Bu durumda, context2 permanentMOC olurdu.) Bunu yaptığımda ancak, kopyalanan nesne hatalı; verileri başlangıçta çözülmemiş. Karar almak ne zaman, daha sonra, tüm değerleri yok; orijinal managedObject verileri (özellikleri veya ilişkileri) hiçbiri aslında kopyalanan ya da başvurulur. Bu objectWithİD kullanma arasında herhangi bir fark göremiyorum. bu yöntem sadece permanentMOC içine tamamen yeni bir nesne eklemek için insertNewObjectForEntityForName kullanarak:.
PermanentMOC yeni bir nesne oluşturun ve el ile eski nesnesindeki anahtar-değer her çift kopya ben biliyorum, ama bu çözüm çok memnun değilim. Ve yazıyı güncellemek zorunda istemiyorum bu yüzden (bu sorun var farklı yönetilen nesneleri bir dizi var: geliştirmeye devam ederken, hepsinin bir yöntem.) Daha iyi bir yolu var mı?
CEVAP
İlk olarak, tek bir konu üzerinde 2 ** birden fazla yaşıyordeğilstandart bir yapılandırma. 99% zaman sana tek bir içerik var, o da senin için bu durumu çözecektir.
Neden birden fazla NSManagedObjectContext ihtiyaç duyuyorsun?
Güncelleme
Aslında bu mantıklı burada gördüğüm birkaç kullanım durumları biridir. Bunu yapmak için, her bir içerik nesnesi özyinelemeli bir kopyasını yapmak gerekir. İş akışı aşağıdaki gibi olacaktır
- Kalıcı bağlamında yeni bir nesne oluşturur
- kaynak nesne (
-dictionaryWithValuesForKeys-[NSEntityDescription attributesByName]bunu yapmak için kullanın. öznitelikleri bir sözlük al - hedef nesne üzerine değerler sözlüğü (
-setValuesForKeysWithDictionary) kullanarak ayarlayın - Eğer ilişki varsa, bu özyinelemeli olarak kopyalama ve
-[NSEntityDescription relationshipsByName]kullanarak sabit (bazı döngüsel mantık önlemek için) kodlu veya ilişkileri yürümek gerekir
Başka bir tarafından belirtildiği gibi, The Pragmatic Programmers Core Data Book kitabımdan örnek kodu indirmek ve bu soruna bir çözüm görebilirsiniz. Kitapta tabii ki ben daha fazla derinlik: ele

Nasıl TortoiseSVN başka bir klasördeki...
Nasıl başka bir sunucudan redis verita...
Nasıl başka bir repo için github üzeri...
Nasıl bir dize başka bir dize içeriyor...
Bir dize kontrol etmek için nasıl &quo...