Hey, buradaki uygulamamız için model katmanı üzerinde çalışıyorum.
Bazı gereksinimler şu şekildedir:
- İPhone OS 3.0+ üzerinde çalışmalıdır.
- Verilerimizin kaynağı bir RESTful Rails uygulamasıdır.
- Verileri Core Data kullanarak yerel olarak önbelleğe almalıyız.
- İstemci kodu (UI denetleyicilerimiz), herhangi bir ağ öğesi hakkında olabildiğince az bilgiye sahip olmalı ve modeli Core Data API ile sorgulamalı / güncellemelidir.
Sunucu güdümlü bir Kullanıcı Deneyimi Oluşturma üzerine WWDC10 Oturum 117'yi kontrol ettim , Amaç Kaynağı , Çekirdek Kaynak ve RestfulCoreData çerçevelerini kontrol etmek için biraz zaman harcadım .
Objective Resource çerçevesi, Core Data ile kendi başına konuşmaz ve yalnızca bir REST istemci uygulamasıdır. Core Resource ve RestfulCoreData, kodunuzda Core Data ile konuştuğunuzu varsayar ve model katmanında arka planda bulunan tüm somunları ve cıvataları çözerler.
Şimdiye kadar her şey yolunda görünüyor ve başlangıçta Core Resource veya RestfulCoreData'nın yukarıdaki tüm gereksinimleri karşılayacağını düşündüm, ancak ... Hiçbirinin doğru şekilde çözülmediği birkaç şey var:
- Sunucuya yerel güncellemeler kaydedilirken ana iş parçacığı engellenmemelidir.
- Kaydetme işlemi başarısız olursa, hata kullanıcı arayüzüne yayılmalı ve yerel Temel Veri deposuna hiçbir değişiklik kaydedilmemelidir.
Çekirdek Kaynak - (BOOL)save:(NSError **)error
, Yönetilen Nesne Bağlamınızı çağırdığınızda tüm isteklerini sunucuya gönderir ve bu nedenle sunucuya bir şekilde başarısız olan temel isteklerin doğru bir NSError örneğini sağlayabilir. Ancak, kaydetme işlemi bitene kadar çağıran iş parçacığını engeller. BAŞARISIZ.
RestfulCoreData, -save:
çağrılarınızı olduğu gibi tutar ve istemci iş parçacığı için herhangi bir ek bekleme süresi sağlamaz. Yalnızca izler NSManagedObjectContextDidSaveNotification
ve ardından ilgili istekleri bildirim işleyicisindeki sunucuya gönderir. Ama bu şekilde -save:
çağrı hep başarıyla tamamlar aslında başarısız olabilir tasarrufu nedeniyle bazı sunucuya yaymak bilmek için bir yol vardır denilen ve istemci kodu (iyi, verilen Çekirdek Veri kaydedilen değişikliklerle tamamdır) 404
veya 421
ya da her ne sunucu tarafında hata oluştu. Ve dahası, yerel depolama verileri güncellenmiş olur, ancak sunucu değişiklikleri asla bilmez. BAŞARISIZ.
Bu nedenle, tüm bu sorunların üstesinden gelmek için olası bir çözüm / ortak uygulamalar arıyorum:
-save:
Ağ istekleri gerçekleşirken arama iş parçacığının her aramada engellenmesini istemiyorum .- Kullanıcı arayüzünde bir şekilde bazı senkronizasyon işlemlerinin yanlış gittiğine dair bildirimler almak istiyorum.
- Sunucu istekleri başarısız olursa gerçek Çekirdek Veri kaydının da başarısız olmasını istiyorum.
Herhangi bir fikir?