2013-02-02 16 views
2

我有一個同步NSFileWrapper文檔與iCloud的問題。我能夠創建我的包裝並將其保存到我無處不在的容器中。NSFileWrapper從iCloud失敗,並從本地目錄工作

當我嘗試從創建它的設備讀取它時,它可以工作。當我嘗試從iCloud上讀取另一臺設備時,它會崩潰。

一些代碼:

該功能增加的包裝容器用的NSString

- (void) addNSString:(NSString*)_string toFileWrapper:(NSFileWrapper*)_wrapper forKey:(NSString*)_key { 

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_string]; 

    if(data) { 

     [_wrapper addRegularFileWithContents:data preferredFilename:_key]; 
    } 

}

然後這裏是我如何對其進行解碼:

- (id) unarchiveObjectFromWrappers:(NSDictionary*)_wrappers withKey:(NSString*)_key { 

    id value = nil; 

    NSFileWrapper *wrapper = [_wrappers valueForKey:_key]; 
    if(wrapper) { 

     NSData *data = [wrapper regularFileContents]; 

     if(data) { 

      value = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
     } 
    } 

    return value; 
} 

的解碼部分在一個設備上工作,而不在其他設備上工作(EXC_BAD_ACCESS當NSKeyedUnarc hiver試圖從NSData中取消歸檔。 NSData看起來不錯,它有適當的長度和一切,但當我嘗試記錄它的數據,例如它崩潰)。

我的猜測是,NSFileWrapper並沒有下載它的全部內容,只有它的結構,我不得不做一些事情使它可用。但我不知道是什麼。

任何想法?

========

編輯:

NSURLUbiquitousItemIsDownloadedKey說,該文件被下載,但如果我嘗試將其複製到沙盒失敗與此錯誤:「手術couldn」 T爲完成。錯誤的文件描述符」

所以文件或者不正確上傳到iCloud或無法正常下載...

+0

我面臨着類似的問題,如果我嘗試閱讀無處不在容器(icloud的文檔文件夾):

[[NSFileManager defaultManager]startDownloadingUbiquitousItemAtURL:cloudURL error:nil]; 

相關的NSFileManager。如果我在運行NSMetadataQuery之後訪問它,我可以訪問這些文件。所以我猜,你直接用NSFileManager訪問文件? – auco

+0

托馬斯,也許這是你的情況:http://stackoverflow.com/questions/8714525/cannot-sync-simple-text-file-with-icloud-bad-file-descriptor – brigadir

回答

1

這讓我抓狂了。該解決方案相當簡單,但完全沒有Apple的文檔。您必須專門下載文件。只有文件包裝自動下載,但不包含其內容。這就是爲什麼檢查說文件存在。

之前在複製文件,調用是這樣的:有Cannot sync simple text file with iCloud (bad file descriptor)

相關問題