2012-01-29 76 views
6

當處於飛行模式或網絡訪問不可用的任何其他狀態時,將調用NSFileManager的URLForUbiquityContainerIdentifier:返回nil?URLForUbiquityContainerIdentifier:當網絡訪問不可用時返回nil嗎?

一個跟進問題是這樣的:如果調用URLForUbiquityContainerIdentifier:不回零,而是返回一個有效的URL,當網絡訪問不可用,這是離線訪問基於雲的文件的方法嗎?

蘋果文檔聲明,如果iCloud未配置或未啓用,這將返回nil。它沒有提到如果網絡訪問不可用會發生什麼。

我會自己測試一下,但是從我的理解中我將不得不在實際設備上測試這個設備,目前還不能在設備上測試設備。謝謝!

回答

5

UbiquityContainer是一個本地存儲容器,它包含您從iCloud請求的文檔。當網絡不存在時,此容器可用。通過使用以下示例

NSURL *ubiq = [[NSFileManager defaultManager] 
    URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) { 
    NSLog(@"iCloud access at %@", ubiq); 
    // TODO: Load document... 
} else { 
    NSLog(@"No iCloud access"); 
} 

當手機處於飛行模式時,您將能夠訪問文件和無處不在的容器。當網絡連接恢復時,icloud守護進程將自動同步文件,即使在後臺也是如此。

這是一篇關於iCloud設置的精彩文章。 http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1

+1

謝謝!我一直試圖在我的頭上繞了幾天(我不願意承認哈哈)。我認爲我的困惑是基於這樣的事實:我認爲ubiquityContainer是雲中的一個位置,而不是本地存儲容器。這是我沒有抓住的一個基本概念。再次感謝! – 2012-01-29 05:03:51

+0

當然,我只是在iCloud UbiquityContainers上回答了另一個問題。我應該提到NSFileManager可以被阻塞,並且推薦它在不同的隊列中運行。看看這個答案:http://stackoverflow.com/questions/9050359/should-urlforubiquitycontaineridentifier-be-called-in-a-thread-outside-the-main/9051105#9051105 – MobileOverlord 2012-01-29 05:12:58

+1

有關阻塞的好處 - 這很有趣,因爲如果您查看Apple的示例文檔或上面引用的網站代碼,則URLForUbiquityContainerIdentifier調用位於主線程中。如果這是一個潛在的問題,你會認爲蘋果會記下這一點,對吧? – 2012-01-29 05:30:49