2011-10-19 20 views

答えて

27

編集:
あなたはiOS6か、[[NSFileManager defaultManager] ubiquityIdentityToken];を使用することができ、上記をターゲットにしている場合。使用例については、@Dj S' answer :)を参照してください。
それはより速く、より簡単にiOS App programming guide - iCloud Storageに記載したようiOS5ををターゲットに、人と

上記オリジナル回答
のために意図されたオリジナルのソリューションよりもです。これは、ファイルマネージャへのユビキタス・コンテナのURLを尋ねることによって確認することができます:)

は、限り、あなたは法下の有効なユビキタスコンテナ識別子を供給するようしかし、URLForUbiquityContainerIdentifier:ことを私が見つけた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; 
} 

を返す必要がありますセッション内ではじめて数秒かかるかもしれません(私はiOS5でこれを使っていましたので、今は状況が異なるかもしれません)。例えば 、ただ、上記の解答を補足するために

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

優れた解決策です。 – NSSplendid

+1

残念ながらApple docへのリンクは機能しません。 URLForUbiquityContainerIdentifierを検索することができます:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html – Oscar

+0

アップルは絶えず場所を変更し、リンクが更新されます。 :) – nacho4d

17

あなただけのiCloudは、あなたのアプリケーションのために利用可能であるかどうかを知りたい場合は、 :私はこのようなものを使用して覚えています
1.何のiCloudアカウントが設定されていない、または
2.資料・データは、(すべてのアプリケーションのために)無効になっている、または
3.資料・データのみを

が、その後あなたがNSFileManager's ubiquityIdentityTokenを使用することができ、あなたのアプリのために無効になっていますiOS 6以上
値がnilの場合、iCloudアカウントは設定されていません。それ以外の場合は、iCloudアカウントが設定されます。 Apple docsによると、あなたはメインスレッドからそれを呼び出すことができます

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

注意。

このメソッドは比較的早く戻りますので、起動時に呼び出すことができ、アプリケーションのメインスレッドから呼び出すことができます。

関連する問題