Eşitleme ve yedekleme için Core Data, iCloud ve CloudKit'i kullanma ve birlikte nasıl çalıştığını


111

Verileri kaydetmek, senkronize etmek ve yedeklemek istediğim bir uygulama oluşturmanın ilk aşamalarındayım. Uygulama herhangi bir dosyayı sadece veri tabanında saklamaz. İOS 8 ve üstü olacak, bu yüzden CloudKit'i kullanabiliyorum. Biraz araştırma yaptım ve Core Data, iCloud ve CloudKit'in birlikte nasıl çalıştığını hala netleştirmedim.

Anlaşıldığı kadarıyla CloudKit, buluttan / buluttan veri almanın ve almanın bir yoludur. CloudKit, verileri iCloud ile senkronize etmenin farklı bir yolu mu?

Sorularım:

  1. CloudKit kullanırsam, yine de yerel çekirdek veri veritabanı oluşturmam gerekir mi?

    • Evetse, iCloud ile otomatik olarak senkronize edilecek mi yoksa her iki yerde de depolamak için yöntemleri aramam gerekecek mi?
  2. Veriler yalnızca bulutta depolanırsa, kullanıcı iOS cihazı internete bağlı olmadığında erişebilir. CloudKit'in yalnızca sınırlı önbelleğe alınacağını okudum.

  3. İCloud hesabı etkin değilse bu nasıl çalışacak?

Birisi, temel veri veritabanını çevrimdışı ve çevrimiçi kaydetme ve eşitleme sürecinde her teknolojinin ne yaptığını bir şekilde bozabilirse.

Şu anki anlayışım:

  • Temel Veriler, verileri yerel olarak depolamak için kullanılır

  • iCloud, verileri senkronize eder ve bulutta depolar

  • CloudKit, verileri bulutta depolama ve yönetme yeteneği sağlar.

Umarım bu sorunun kapanmaması için yeterli bilgi vermişimdir.


2
O kadar fazla araştırma yapmadım bile ama anladığım kadarıyla yerelde saklanmıyor. Normal sunucu istemci hizmeti gibi bir şey. Bu yüzden internet olmadan DB'nize erişemezsiniz. ve Doc'a göre, kullanıcı o sırada icloud hesabını etkinleştirmediyse, verileri yalnızca genel kapsayıcıdan okuyabilirsiniz
Sachin

@Yan, böyle yapabilir miyiz, lütfen önerin, stackoverflow.com/questions/25600556/…
Nikunj

Yanıtlar:


183

Bunun gibi:

  • Temel Veriler kendi başına tamamen yereldir ve Apple'ın bulut hizmetlerinin hiçbiriyle otomatik olarak çalışmaz.
  • İCloud'un etkin olduğu Temel Veriler , iCloud aracılığıyla eşzamanlamayı açar. Core Data'da kaydettiğiniz tüm değişiklikler buluta yayılır ve bulutta yapılan değişiklikler otomatik olarak indirilir. Veriler hem iCloud'da hem de yerel bir kalıcı mağaza dosyasında saklanır, böylece aygıt çevrimdışıyken bile kullanılabilir. Buluta özgü herhangi bir kod yazmanız gerekmez, yalnızca gelen değişiklikler için dinleme eklemeniz gerekir (bu, farklı bir yönetilen nesne bağlamında yapılan değişikliklere çok benzer).
  • CloudKit, Temel Veriler ile ilgili değildir. Bu bir senkronizasyon sistemi değil, bir transfer sistemi. Yani, bulut verilerini okumak / yazmak istediğinizde, bunu yapmak için açık CloudKit API çağrıları yapmanız gerekir. Hiçbir şey otomatik olarak gerçekleşmez. CloudKit cihazda veri depolamaz, bu nedenle cihaz çevrimdışıysa veriler kullanılamaz. CloudKit ayrıca, iCloud ile Core Data'da bulunmayan bazı özellikleri de ekler; örneğin, herkese açık paylaşılan veriler ve her şey yerine veri kümesinin yalnızca bir kısmını indirme yeteneği.

CloudKit'i Çekirdek Verilerle kullanmak istiyorsanız, yönetilen nesneler ve CloudKit kayıtları arasında çeviri yapmak için kendi özel kodunuzu yazmanız gerekir. İmkansız değil ama yazmak daha çok kod. Bu belki daha güvenilir ama kesin söylemek için çok erken.

CloudKit'i geçmişte Core Data ve iCloud'u kullanan birinin bakış açısından açıklayan bir blog yazısı yazdım .

Güncelleme , Haziran 2016: için en son belgelerden itibarenNSPersistentStoreCoordinator iCloud ile Temel Veriler ile ilgili her şey kullanımdan kaldırıldı olarak işaretlenmiştir. Sonuç olarak yeni geliştirme için muhtemelen bundan kaçınılmalıdır.


1
Geçmişte Core Data'yı iCloud ile kullanırken yolsuzluk sorunu yaşadım, ancak iOS 7 çıktığından beri pek kullanmadım. Çok daha iyi olması gerekiyordu. CloudKit ile henüz resmi olarak piyasaya sürülmediği için söylemek için çok erken.
Tom Harrington

3
@Tom Harrington - iOS 8 için iCloud ile Core Data'yı deneyebilir ve izlenimlerinizi bize bildirebilir misiniz? İOS 7'de de çok fazla bozulma yaşadım ve Apple desteği birçok hatayı doğruladı. Umarım iOS 8, güvenilirliğini kabul edilebilir bir seviyeye getirir, ancak sizden, yani uzmandan haber almak isterim;)
hyouuu

1
CKSIncrementalStore'a göz atın. github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood

3
"Buluta özgü herhangi bir kod yazmanıza gerek yok, yalnızca gelen değişiklikler için dinleme eklemeniz gerekiyor (bu, farklı bir yönetilen nesne bağlamında yapılan değişikliklere çok benzer)." - bu yorumla ilgili bir kod örneği / örneği var mı?
Ernest

1
@TomHarrington, bu tür geri bildirimlerle neden tek yapmamız gereken belgeleri kontrol etmekse neden yığın aşımı yapalım :(
Ernest

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.