Şu anda bir arka plan alt iş parçacığı (ana UI iş parçacığı bağlamı olan) ve kaydetme yeni bir nesne oluştururken, NSFetchedResultsController
iki yeni nesneyi göstermeye neden olan bir sorun yaşıyorum: biri geçici objectID
ve biri diğeri kalıcı objectID
. Bir şey kaçırmadığım sürece, bu bir çeşit hata gibi görünüyor.Ne zaman getPermanentIDsForObjects :?
Bu nedenle, oluşturduğum yeni nesneler için kalıcı kimlikler elde edeceğimi düşündüm. Bu, yinelenen satır sorununu giderir, ancak yeni rastgele hatalar sunar (örneğin, oluşturduğum yeni nesneye atıfta bulunarak "nesne için hatayı yerine getiremedi" gibi). Daha önce bahsedilenlerden herhangi birinin neden olduğuna dair herhangi bir fikri varsa, lütfen paylaşın.
Tahmin ediyorum obtainPermanentIDs
doğru yönde bir adımdır. Ama bu yöntemi ne zaman ararım? Çocuk içeriğine kaydetmeden önce? Çocuğu ve sonra ebeveynini kurtardıktan sonra? Ebeveynten sonra mı? Ben backgroundMOC
üzerinde yeni bir nesne oluşturmak Yani
masterMOC - private queue tied to the persistent store, so physical saves happen here
----mainMOC - main queue tied to the UI, child of masterMOC
-------backgroundMOC - private queue, child of mainMOC
ve ben (ı kurtarmak aramak gerekecek demektir: Her üç bağlamlarda üzerine) diske kaydetmek immediatly niyetinde: Şu benim kurulum şudur, nerede obtainPermanentIDs
'u çağırmalı mıyım?
(ya da herhangi kalıcı kimlikleri elde çağıran dışında farklı bir çözüm varsa hangi sorun bu yöntemi çağırmak için isteyeyim Neden neyse çözmek için tanıtıldı bu yöntem oldu??)
Güncelleme: bence Ne olduğunu çözmemeye rağmen ne olduğunu anladım (sadece bir teori olsa da). Çekirdek Veriler, fiziksel olarak diske kaydedildiğinde, nesneler için kalıcı kimlikler oluşturur. Yani benim durumumda, masterMOC üzerinde kaydetme çağrısı yapana kadar bu olmayacak. Şu anda backgroundMOC üzerinde yeni bir nesne oluştururken benim yaptığım:
- tasarruf backgroundMOC üzerinde (böylece değişiklikler mainMOC alarak bir seviye yukarı itilir ve benim tablo görünümünde yeni satırlar eklemek anlamına)
- tasarruf (nihayet diske kaydeder olan) masterMOC tasarruf
- (ı diske kaydetmek için hazırlanmak böylece) mainMOC üzerinde
burada oluyor backgroundMOC üzerinde tasarruf çağıran bir UI güncellemesi tetikler ve neden olmasıdır Hala sahip olan yeni bir nesne eklemek için sonuç denetleyicisini getirdi ly geçici bir kimlik. Ancak, masterMOC üzerinde kaydetme çağrısı, tüm nesnelerin kalıcı kimlikler atamasına neden olur; bu da başka bir kullanıcı arayüzü güncellemesine neden olur, bu "yeni" nesne için başka bir satır ekler! Son masterMOC kaydetmesini yorumlayarak, artık girişleri göremiyorum. Burada yanlış bir şey mi yapıyorum yoksa bu bir çeşit hata mı?
Başka bir güncelleştirme: Sanırım hatayı çok doğruladım. BackgroundMOC üzerinde kaydetmeyi çağırın ve daha sonra mainMOC ve masterMOC 5 saniye sonra kaydetmek için bir zamanlayıcı ayarlayın. Immediatley, backgroundMOC'ye kaydedildikten sonra, masama yeni bir satır eklenir. 5 saniye sonra (ana ve ana kaydedildikten sonra), başka bir yeni satır eklenir. (eklenen satırın bir temp kimliği vardır ve en yeni eklenti kalıcı bir kimliğe sahiptir).
yorumunuz nedense bana yardımcı oldu ama başka bir şekilde. NSFetchedresultscontroller kullanıyordum ve geçici ve kalıcı oluyordu. Yani her zaman denetleyici didchangecontent çağırır bir getPermanentIDsForObjects: tüm getirilen nesneler için ve şimdi mükemmel çalışıyor! –
@ JoãoNunes hala benim için çalışmıyor, kimliğim zaten kalıcı ve bu hata hala devam ediyor –
Ne tür bir hata var? –