SORU
8 HAZİRAN 2010, Salı


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
9 HAZİRAN 2010, ÇARŞAMBA


İ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

  1. Kalıcı bağlamında yeni bir nesne oluşturur
  2. kaynak nesne (-dictionaryWithValuesForKeys -[NSEntityDescription attributesByName] bunu yapmak için kullanın. öznitelikleri bir sözlük al
  3. hedef nesne üzerine değerler sözlüğü (-setValuesForKeysWithDictionary) kullanarak ayarlayın
  4. 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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dirkgently1

    dirkgently1

    13 NİSAN 2006
  • Goran Dimov

    Goran Dimov

    1 HAZİRAN 2014
  • tinycammonitor

    tinycammonit

    14 Aralık 2010