2012-08-31 30 views
12

我有時在打開存儲在iCloud上的UID文檔時遇到問題。在檢查iCloud是否可用並獲取NSMetaDataQuery的結果後,我在應用程序的一開始就調用以下代碼。這在98%的情況下都有效。這只是有時(例如,有時後重新安裝應用程序)的completionHandler將永遠不會被稱爲:爲什麼iCloud有時會停止工作?

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL]; 
[doc openWithCompletionHandler:^(BOOL success) { 

    NSLog(@"... doc: openedWithCompletionHandler"); 

正如你可以從代碼中看到,我初始化一個新的UIDocument實例(FRNBDocument),所以它不能這樣比舊的UIDocument仍然打開,因此這個打開失敗。

讓應用程序再次工作的唯一方法是殺死它,然後轉到settings.app> iCloud> Documents & Data並將其關閉,然後再次打開它。當我回到應用程序,UIDocs將被加載沒有問題。

我注意到,其他應用程序(例如,通過sophiestication xTrail)有同樣的問題,那我只能讓他們做上述伎倆後再次運行。

這是怎麼回事?

+0

你可以發佈你用來附加到iCloud的代碼和其餘的文件代碼..沒有足夠的代碼在這裏。 –

+0

@stackmonster我使用正常的代碼,我很樂意發佈,但我認爲它不會有多大幫助。說到蘋果,看起來好像它是一個衆所周知的bug。 –

回答

3

好吧,這似乎是一個iCloud的bug。我一直與蘋果公司聯繫,他們建議提交一份錯誤報告。所以我做了(編號12260670)。

我現在要做的就是簡單地實現一個計時器。如果UIDocs在20秒後未加載,我將顯示一個AlertView,告訴用戶轉至settings.app> iCloud> Documents & Data,然後將其關閉,然後再次打開它。

這是如此令人沮喪。難以置信的。

+1

@stackmonster如果這不是一個錯誤,請解釋原因。如果能解決問題,我很樂意將您的答案標記爲正確答案。謝謝。順便說一句,我試圖使用技術支持發生這個問題,所以我敢肯定他們會向我解釋API,如果這不是一個錯誤。但他們退還了TCI發病率,並說我應該提交一個錯誤。 –

0

的iCloud訪問需要的功能

- (NSURL *)URLForUbiquityContainerIdentifier:(NSString *)containerID 

返回

指向指定的無處不在容器的URL,或如果容器不能定位,或者iCloud中的回呼存儲對當前用戶或設備不可用。

Reference

隨着iCloud的是不是有求必應,我檢查,如果我得到URL,然後才能繼續進行對數據的進一步同步。

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) 
{ 
    NSLog(@"iCloud access at %@", ubiq); 
    [self loadDocument]; 
} 
else 
{ 
    NSLog(@"No iCloud access"); 
} 
+0

我不認爲這是問題所在。我得到一個有效的ubiq,我甚至通過NSMetaDataQuery得到結果。但是,一旦iCloud卡住,沒有結果可以加載。 –

+0

您可以使用添加通知[NSNotificationCenter defaultCenter] 的addObserver:自 選擇:@選擇(queryDidFinishGathering :) 名稱:NSMetadataQueryDidFinishGatheringNotification 對象:查詢] –

+0

我已經完成了所有工作。我可以發佈整個代碼,但是這非常繁瑣。我確信一切都很好,而且95%的時間都有效。有時,只有在有時候,iCloud纔會播放並且不會加載UIDocument。這顯然是一個已知的問題 - 其他開發者也有同樣的問題。 –

1

我有類似的問題。 NSMetadataQuery返回一個結果,但openWithCompletionHandler:偶爾不會完成,所以應用程序的數據不會加載。在嘗試加載文檔之前,我有一個解決方法是檢查NSMetadataUbiquitousItemIsDownloadedKey。如果沒有下載,我調用evictUbiquitousItemAtURL,然後startDownloadingUbiquitousItemAtURL。然後我必須繼續輪詢與NSMetadataQuery爲NSMetadataUbiquitousItemIsDownloadedKey是此時我可以成功調用openWithCompletionHandler如此。這似乎解決了這個問題。然而令人沮喪的是,這似乎不再適用於iOS 6,或者不再一直工作。如果您發現更好的解決方法或獲得Apple的錯誤更新,請保持我們更新。

相關問題