2011-10-19 31 views
14

Dưới đây là câu từ Apple Documents: "Nếu iCloud không được cấu hình, yêu cầu người dùng nếu họ muốn cấu hình nó (và, tốt, chuyển chúng sang Khởi động Cài đặt nếu họ muốn cấu hình iCloud). "Làm thế nào để kiểm tra xem iCloud được cấu hình lập trình

Làm cách nào để kiểm tra xem iCloud có được định cấu hình hay không và cách khởi chạy cài đặt cho iCloud?

Trả lời

27

Edit:
Nếu bạn đang nhắm mục tiêu iOS6 trở lên bạn có thể sử dụng [[NSFileManager defaultManager] ubiquityIdentityToken];. Để biết ví dụ về cách sử dụng, vui lòng tham khảo @Dj S' answer :).
Nó là nhanh hơn và dễ dàng hơn so với các giải pháp ban đầu được dành cho người nhắm mục tiêu iOS5 trở lên

gốc trả lời
Như ghi nhận ở iOS App programming guide - iCloud Storage. Điều đó có thể được kiểm tra bằng cách yêu cầu URL chứa có mặt khắp nơi với trình quản lý file :)

Chừng nào bạn cung cấp một định danh chứa có mặt khắp nơi có giá trị thấp hơn phương pháp nên return YES

- (BOOL) isICloudAvailable 
{ 
    // Make sure a correct Ubiquity Container Identifier is passed 
    NSURL *ubiquityURL = [[NSFileManager defaultManager] 
     URLForUbiquityContainerIdentifier:@"ABCDEFGHI0.com.acme.MyApp"]; 
    return ubiquityURL ? YES : NO; 
} 

Tuy nhiên, tôi đã phát hiện ra rằng URLForUbiquityContainerIdentifier: có thể mất vài giây lần đầu tiên trong một phiên (tôi đã sử dụng nó trong iOS5 để mọi thứ có thể khác nhau bây giờ). Tôi nhớ sử dụng một cái gì đó như thế này:

dispatch_queue_t backgroundQueue = 
    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(backgroundQueue,^{ 
    BOOL isAvailable = [self isICloudAvailable] 
    /* change to the main queue if you want to do something with the UI. For example: */ 
    dispatch_async(dispatch_get_main_queue(),^{ 
     if (!isAvailable){ 
     /* inform the user */ 
     UIAlertView *alert = [[UIAlertView alloc] init...] 
     [alert show]; 
     [alert release]; 
     } 
    }); 
}); 
+0

giải pháp tuyệt vời. – NSSplendid

+1

Thật không may là liên kết tới tài liệu Apple không hoạt động. Bạn có thể tìm kiếm URLForUbiquityContainerIdentifier tại đây mặc dù: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html – Oscar

+0

Apple liên tục thay đổi vị trí, liên kết được cập nhật. :) – nacho4d

17

Chỉ cần bổ sung câu trả lời ở trên, nếu bạn chỉ muốn biết nếu iCloud có sẵn cho các ứng dụng của bạn, ví dụ
1. không có tài khoản iCloud được thiết lập, hoặc
2. Tài liệu và dữ liệu bị vô hiệu hóa (đối với tất cả các ứng dụng), hoặc
3. Các tài liệu và dữ liệu bị vô hiệu hóa cho ứng dụng của bạn chỉ

sau đó bạn có thể sử dụng NSFileManager's ubiquityIdentityToken cho iOS 6 trở lên.
Nếu giá trị bằng 0, thì tài khoản iCloud chưa được định cấu hình. Nếu không, tài khoản iCloud được cấu hình.

id token = [[NSFileManager defaultManager] ubiquityIdentityToken]; 
if (token == nil) 
{ 
    // iCloud is not available for this app 
} 
else 
{ 
    // iCloud is available 
} 

Lưu ý rằng theo Apple docs, bạn có thể gọi nó theo chủ đề chính.

Vì phương thức này trả về tương đối nhanh, bạn có thể gọi nó ngay lúc khởi chạy và bạn có thể gọi nó từ chuỗi chính của ứng dụng.

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