2009-10-25 13 views
9

Çevrimiçi hizmete karşı arama gerçekleştirecek ve çok sayıda Sonuç nesnesi oluşturacak bir uygulama üzerinde çalışıyorum. Sonuç nesnesi, bir NSManagedObjectContext ile ilişkilendirerek gereken şekilde başlatılan bir NSManagedObject'dir.Birçok geçici nesne nasıl oluşturur ve ardından Temel Verileri kullanarak yalnızca bir tanesini kaydeder miyim?

Kullanıcılar bir "Sonuç" seçebilmeli ve bir "Favori" olarak kaydedebilmelidir. Uygulamada, Sonuç varlığını yeni bir Favori öğesiyle ilişkilendirmek ve içeriği kaydetmek kadar basittir.

Sorun, tabanda her bir Sonucun, Favorediğim ile birlikte veritabanına kaydedilmesidir.

Çeşitli oluşturma ve kalıcılık durumlarını yönetmek için çok sayıda NSManagedObjectContext örneğini kullanmanın birçok örneğini gördüm. Hepsi bir Bağlamla yeni örnekler yaratma fikrinin etrafında dönüyor ve bir başka FetchRequest uygulamasından kaçınmak için onları başka bir bağlamda saklıyor. Bu örnekler sorunu, kaydedilmekte olan her Sonuç öğesine yönlendirdiklerinden çözmez.

Herhangi bir öneriniz var mı? Bu işten tamamen vazgeçtim.

cevap

5

Her nesne için farklı bir bağlam kullanmalısınız. Ayrı bir yönetilen nesne bağlamı kullanmak, aşağıdaki gibi çalışmanıza izin verir. Kullanıcı favori nesnesini seçtiğinde, kalan sonuç nesneleriyle ilgili bağlamları atıyorsunuz. Değişiklikleri vb. Birleştirmeye gerek yok. Temelde bir tradeoff var. Sonunda birkaç bağlamı yönetme (oluşturma/çıkarma) ile sonuçlanırsınız, ancak daha sonra hedefinize kolayca ulaşırsınız. Aksi takdirde, bunu yalnızca tek bir bağlam kullanarak yapabilirsiniz. Ancak, aşağıdaki kod parçacıklarında gösterildiği gibi her nesneyi açıkça eklemeniz veya silmeniz gerekir.

Bunu deneyin. kaydetmek istediğiniz favori nesne, aşağıdakileri yapın Yalnızca: başka sonuç nesnelerin her biri için

[managedObjectContext insertObject:theFavorite]; 

yerine bunu:

[managedObjectContext deleteObject:aResult]; 

ardından kaydetmek her zamanki gibi

NSError *error = nil 
if (![managedObjectContext save:&error]) { 
    // Handle error 

} 

Bu SADECE seçtiğiniz, en sevdiğiniz nesneyi koruyacaktır.

+0

Cevabınızın ilk kısmı ile gittik. Nesne grafiği başına bir Bağlam kullanıyoruz ve gerektiğinde bunu kaydediyoruz. – user174448

3

NSManagedObject alt sınıfları olmayan Sonuç nesneleri oluşturun. Kullanıcı bir tane seçtiğinde, tek bir yönetilen örnek oluşturun ve bunu kaydedin.

+0

Sorunu basitleştirmek için basitlik sorunu oldu. Sonuç nesnesi, birçok özelliğe ve çeşitli ilişkilere sahip bir varlıktır. Sınıfları çoğaltma düşüncesi beni ağzımda fırlatıyor :) – user174448

4

Bir NIL bağlamı kullanmayı ve bunları sürdürmek istediğimde yinelemeli olarak geçerli bir içeriğe nesne eklemeye yönelik bir temel etki alanı modeli sınıfına sahip olmayı tercih ederim. Gerçekten güzel (ve temiz!) Çalışır ... kod burada kullanılabilir ... Temporary Core Data

+0

Bu, temp nesnesi için iyi bir çözümdür. Ancak, ilişkiye nesneyi eklediğinizde, * bir bağlamı * ayarlamış olursanız ne olur? Burada en iyi yaklaşım nedir? –

+0

Ayrıca şu soruya da bakın: http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric

İlgili konular