2012-06-13 19 views
11

Tôi đang sử dụng NSUbiquitousKeyValueStore để đồng bộ hóa một số dữ liệu tùy chọn với iCloud. Tôi thấy rằng nếu người dùng vô hiệu hóa "Tài liệu & Dữ liệu" mục của iCloud trong "Cài đặt ứng dụng", NSUbiquitousKeyValueStore không thể đồng bộ hóa dữ liệu của mình với iCloud. Vì vậy, tôi muốn kiểm tra đầu tiên nếu thiết lập này được bật on.After googling, tôi thấy Đoạn mã này:Làm thế nào để phát hiện lập trình nếu iCloud được kích hoạt trên thiết bị của người dùng khi chỉ sử dụng NSUbiquitousKeyValueStore?

NSURL *ubiq = [[NSFileManager defaultManager] 
        URLForUbiquityContainerIdentifier:nil]; 
    NSLog(@"url=%@",ubiq); 
    if (!ubiq) { 
     UIAlertView *av = [[UIAlertView alloc] initWithTitle:nil message:@"Please enable iCloud in Setting app" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
     [av show]; 
     return; 

    } 

Những gì tôi muốn biết là cho dù đây là cách duy nhất để phát hiện, ngay cả khi tôi chỉ cần sử dụng NSUbiquitousKeyValueStore (không phải lưu trữ tài liệu iCloud). Có một lựa chọn tốt hơn?

Trả lời

12

Về cơ bản, NSUbiquitousKeyValueStore luôn khả dụng, ngay cả khi người dùng không có tài khoản iCloud (trong trường hợp này, NSUbiquitousKeyValueStore chỉ là bộ nhớ cục bộ đơn giản). Vì vậy, nói chung, bạn không cần phải tự hỏi mình hoặc người dùng nếu có một tài khoản iCloud được cấu hình.

Nếu bạn thực sự muốn biết chắc chắn, trong iOS 5, giải pháp duy nhất là giải pháp bạn đang đề cập.

+0

Câu trả lời của bạn có vẻ mâu thuẫn với tài liệu, nói: “Tránh sử dụng lớp này cho dữ liệu cần thiết cho hành vi của ứng dụng khi ngoại tuyến […]”. Tôi đã đăng một [câu hỏi] (http://stackoverflow.com/q/23662856/251760) về điều đó. Bạn có thể trả lời điều đó không? – Jonathan

+0

Điều này có nghĩa là bạn không nên dựa vào cửa hàng này để trở thành sự thật địa phương của bạn mà còn là một kênh giao tiếp đồng bộ đơn giản giữa các thiết bị của bạn. – Julien

+0

Cảm ơn! Tôi đã trả lời của bạn thành một câu trả lời (http://stackoverflow.com/a/26556553/251760) cho câu hỏi của tôi, tôi hy vọng bạn sẽ ổn với điều đó. (Nếu bạn muốn tự mình trả lời, tôi vui vẻ xóa tên của tôi.) – Jonathan

3

Tôi không biết nếu các tài liệu đã được cập nhật, nhưng Apple hiện đang nói:

Để xác định xem iCloud có sẵn, đặc biệt là vào thời điểm khởi động, kiểm tra giá trị của tài sản ubiquityIdentityToken thay

Xem NSFileManager cho cả hai ubiquityIdentityTokenURLForUbiquityContainerIdentifier.

Cũng lưu ý rằng Apple đang nói rằng URLForUbiquityContainerIdentifier có thể tương đối chậm và việc kiểm tra ubiquityIdentityToken tương đối nhanh.

Đây là dành cho iOS6 trở lên.

+1

Điều này đúng nếu bạn sử dụng Tài liệu iCloud, câu hỏi là về lưu trữ khóa-giá trị iCloud. –

+0

Hmmm. Tôi không nhận được một cái gì đó? Tài liệu cho ubiquityIdentityToken không đề xuất tài liệu cụ thể cho Tài liệu iCloud: "Khi iCloud hiện có sẵn, thuộc tính này [nghĩa là ubiquityIdentityToken] chứa đối tượng mờ thể hiện danh tính của người dùng hiện tại. Nếu iCloud không khả dụng vì bất kỳ lý do gì hoặc ở đó không có người dùng đã đăng nhập, giá trị của thuộc tính này là không. " –

+1

Như Julien đã nói, bộ nhớ khóa-giá trị luôn có sẵn (ngay cả khi 'ubiquityIdentityToken' là nil). Chúng tôi muốn kiểm tra xem người dùng có tắt Cài đặt> iCloud> Tài liệu và dữ liệu hay không. –

Các vấn đề liên quan