Sử dụng Dữ liệu cốt lõi, iCloud và CloudKit để đồng bộ hóa và sao lưu cũng như cách chúng hoạt động cùng nhau


111

Tôi đang trong giai đoạn đầu tạo một ứng dụng mà tôi muốn lưu, đồng bộ hóa và sao lưu dữ liệu. Ứng dụng sẽ không lưu trữ bất kỳ tệp nào chỉ là dữ liệu trong cơ sở dữ liệu. Nó sẽ là iOS 8 trở lên để tôi có thể sử dụng CloudKit. Tôi đã thực hiện một số nghiên cứu và vẫn chưa rõ về cách Core Data, iCloud và CloudKit hoạt động cùng nhau.

Theo như cách hiểu thì CloudKit chỉ là một cách lấy và truy xuất dữ liệu đến / từ đám mây. Có phải CloudKit chỉ là một cách khác để đồng bộ hóa dữ liệu với iCloud?

Câu hỏi của tôi là:

  1. Nếu tôi sử dụng CloudKit, tôi có cần tạo cơ sở dữ liệu dữ liệu lõi cục bộ không?

    • Nếu có, nó sẽ được tự động đồng bộ hóa với iCloud hay tôi sẽ phải gọi các phương thức để lưu trữ vào cả hai nơi?
  2. Nếu dữ liệu chỉ được lưu trữ trên đám mây thì người dùng sẽ có thể truy cập khi thiết bị iOS không được kết nối với internet. Tôi đọc rằng CloudKit sẽ chỉ có bộ nhớ đệm giới hạn.

  3. Điều đó sẽ hoạt động như thế nào nếu tài khoản iCloud không được kích hoạt.

Nếu ai đó có thể phân tích những gì mỗi công nghệ thực hiện trong quá trình lưu và đồng bộ hóa cơ sở dữ liệu cốt lõi ngoại tuyến và trực tuyến.

Hiểu biết hiện tại của tôi là:

  • Dữ liệu cốt lõi được sử dụng để lưu trữ dữ liệu cục bộ

  • iCloud đồng bộ dữ liệu và lưu trữ trên đám mây

  • CloudKit cho khả năng lưu trữ và quản lý dữ liệu trên đám mây ??

Tôi hy vọng tôi đã cung cấp đủ thông tin để câu hỏi này không bị kết thúc.


2
Ngay cả khi tôi đã không nghiên cứu nhiều về nó, nhưng tôi hiểu rằng nó không lưu trữ ở địa phương. Nó giống như dịch vụ máy khách máy chủ bình thường. Đó là lý do tại sao không có internet, bạn không thể truy cập DB của mình. và theo Doc nếu người dùng không kích hoạt tài khoản icloud tại thời điểm đó u chỉ có thể đọc dữ liệu từ thùng chứa công cộng
Sachin

@Yan chúng tôi có thể làm như thế này không, vui lòng đề xuất, stackoverflow.com/questions/25600556/…
Nikunj

Câu trả lời:


183

Nó như thế này:

  • Dữ liệu cốt lõi của riêng nó, hoàn toàn cục bộ và không tự động hoạt động với bất kỳ dịch vụ đám mây nào của Apple.
  • Dữ liệu cốt lõi với iCloud được bật sẽ bật đồng bộ hóa qua iCloud. Bất kỳ thay đổi nào bạn lưu trong Dữ liệu cốt lõi đều được truyền tải lên đám mây và mọi thay đổi được thực hiện trên đám mây sẽ tự động được tải xuống. Dữ liệu được lưu trữ cả trong iCloud và trong tệp lưu trữ liên tục cục bộ, vì vậy dữ liệu có sẵn ngay cả khi thiết bị ngoại tuyến. Bạn không phải viết bất kỳ mã dành riêng cho đám mây nào, bạn chỉ cần thêm lắng nghe các thay đổi sắp tới (rất giống với các thay đổi được thực hiện trên ngữ cảnh đối tượng được quản lý khác).
  • CloudKit không liên quan đến Dữ liệu cốt lõi. Nó không phải là một hệ thống đồng bộ, nó là một hệ thống chuyển giao. Có nghĩa là bất kỳ lúc nào bạn muốn đọc / ghi dữ liệu đám mây, bạn cần thực hiện lệnh gọi API CloudKit rõ ràng để làm như vậy. Không có gì xảy ra tự động. CloudKit không lưu trữ dữ liệu trên thiết bị, vì vậy dữ liệu sẽ không khả dụng nếu thiết bị ngoại tuyến. CloudKit cũng bổ sung một số tính năng không có sẵn cho Dữ liệu cốt lõi với iCloud - như dữ liệu được chia sẻ công khai và khả năng chỉ tải xuống một phần của tập dữ liệu thay vì toàn bộ.

Nếu bạn muốn sử dụng CloudKit với Dữ liệu cốt lõi, bạn phải viết mã tùy chỉnh của riêng mình để dịch giữa các đối tượng được quản lý và bản ghi CloudKit. Không phải là không thể, nhưng cần nhiều mã hơn để viết. Nó thể đáng tin cậy hơn nhưng vẫn còn quá sớm để nói chắc chắn.

Tôi đã viết một bài đăng trên blog mô tả CloudKit từ quan điểm của một người đã sử dụng Core Data và iCloud trong quá khứ.

Cập nhật , tháng 6 năm 2016: Theo tài liệu mới nhất choNSPersistentStoreCoordinator , mọi thứ liên quan đến Dữ liệu lõi với iCloud được đánh dấu là không dùng nữa. Do đó, nó có lẽ nên được tránh để phát triển mới.


1
Trước đây, tôi đã từng gặp rắc rối với lỗi khi sử dụng Dữ liệu lõi với iCloud, nhưng tôi đã không sử dụng nó nhiều kể từ khi iOS 7 ra mắt. Nó được cho là tốt hơn nhiều. Với CloudKit, còn quá sớm để nói vì nó vẫn chưa được phát hành chính thức.
Tom Harrington

3
@Tom Harrington - Bạn có thể dùng thử Dữ liệu cốt lõi với iCloud cho iOS 8 và cho chúng tôi biết ấn tượng của bạn không? Tôi cũng đã gặp nhiều lỗi trong iOS 7 và bộ phận hỗ trợ của Apple đã xác nhận nhiều lỗi. Tôi hy vọng rằng trong iOS 8 mang lại độ tin cậy của nó đến một mức độ chấp nhận được, nhưng rất thích nghe từ bạn, các chuyên gia;)
hyouuu


3
"Bạn không phải viết bất kỳ mã dành riêng cho đám mây nào, bạn chỉ cần thêm lắng nghe các thay đổi sắp tới (rất giống với các thay đổi được thực hiện trên ngữ cảnh đối tượng được quản lý khác)." - bạn có mẫu mã / ví dụ về nhận xét này không? Không có ví dụ chắc chắn nào mà tôi có thể tìm thấy :(
Ernest,

1
@TomHarrington với loại thông tin phản hồi tại sao thậm chí có stackoverflow nếu tất cả chúng ta cần phải làm là tài liệu kiểm tra :(
Ernest

14

Với iOS 13, Apple đã công bố các tính năng mới trong Core Data để hoạt động tốt hơn với CloudKit. Phần bổ sung chính là NSPers phù hợpCloudKitContainer quản lý cơ bản việc đồng bộ hóa giữa Dữ liệu cốt lõi và CloudKit cho bạn.

Bạn có thể tìm hiểu thêm trong phiên WWDC Sử dụng dữ liệu cốt lõi với CloudKit .

Apple cũng đã phát hành một bộ sưu tập tài liệu tuyệt vời cho cách sử dụng này: Sao chép kho dữ liệu cốt lõi với CloudKit .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.