2012-08-27 20 views
8

Trong ứng dụng của tôi, tôi cần chia sẻ cài đặt giữa các thiết bị khác nhau đang chạy ứng dụng. Tôi muốn thiết bị đầu tiên cài đặt ứng dụng để đặt giá trị chính của cài đặt, sau đó tất cả các thiết bị khác sẽ nhận được cài đặt đó và không ghi đè cài đặt đó.Đợi các giá trị iCloud hiện có trước khi đặt giá trị?

  1. Làm cách nào để kiểm tra xem iCloud có giá trị trước khi đặt giá trị không? Vì vậy, tôi không ghi đè lên một hiện có.

  2. Tôi có nên đợi sự kiện NSUbiquitousKeyValueStoreInitialSyncChange được gửi đi không, sau đó tôi có thể kiểm tra giá trị hiện tại cuối cùng và đặt giá trị lần đầu tiên? Nếu có, tôi có thể dựa vào việc nhận sự kiện NSUbiquitousKeyValueStoreInitialSyncChange không? Nếu không, sau đó nó có thể bật ra rằng nó không đặt giá trị iCloud ở tất cả với cách tiếp cận này.

  3. Nếu tôi cố gắng đặt giá trị trước khi NSUbiquitousKeyValueStoreInitialSyncChange được kích hoạt lần đầu tiên, nó sẽ bị hủy bỏ và sau đó NSUbiquitousKeyValueStoreInitialSyncChange sẽ được kích hoạt với dữ liệu hiện có trong cửa hàng?

  4. Tôi đã nghe NSUbiquitousKeyValueStoreInitialSyncChange không được kích hoạt nếu không có giá trị trong cửa hàng khi đồng bộ hóa lần đầu tiên?

Tôi đã đọc tài liệu Apple về điều này và thấy câu trả lời ở đây trên Stack Overflow, nhưng không hiểu cách thực hiện chính xác việc này.

Làm cách nào để đảm bảo rằng tôi không ghi đè giá trị hiện tại vào lần đầu tiên tôi khởi chạy/cài đặt ứng dụng?

Trả lời

8

Không có cách nào để chắc chắn bạn biết bạn đã đồng bộ hóa hiệu quả với cửa hàng ở xa ít nhất một lần và bạn không nên dựa vào nó (hãy tưởng tượng không có tài khoản iCloud được thiết lập hoặc không có máy chủ iCloud hoặc kết nối nào bị hỏng , v.v.: bạn không muốn người dùng của mình đợi bạn để chắc chắn rằng bạn đang đồng bộ với đám mây vì nó có thể mất vĩnh viễn hoặc thậm chí không bao giờ xảy ra).

Bạn nên làm gì:

  • khi bạn bắt đầu, kiểm tra các cửa hàng để xem nếu có một giá trị.
  • Nếu không có giá trị, chỉ cần đẩy giá trị của riêng bạn.
  • Nếu đồng bộ hóa ban đầu với máy chủ chưa xảy ra và trên thực tế, giá trị trong đám mây, điều này sẽ được coi là xung đột theo số NSUbiquitousKeyValueStore. Trong trường hợp chính xác này (đồng bộ hóa ban đầu), chính sách tự động là hoàn nguyên giá trị địa phương của bạn và thay vào đó, hãy ưu tiên giá trị địa phương trong đám mây. Vì vậy, đơn đăng ký của bạn sẽ được thông báo bởi số NSUbiquitousKeyValueStoreDidChangeExternallyNotification của việc hoàn nguyên này với lý do NSUbiquitousKeyValueStoreInitialSyncChange.
  • Nếu thực tế không có giá trị trong đám mây, giá trị địa phương của bạn sẽ được đẩy và mọi người sẽ hài lòng.