2012-01-03 13 views
2

私は、単純なテキストファイルをパクトラブルを抱えている、それを開こうとしたとき、私はこのエラーを取得:のiCloud(不正なファイルディスクリプタ)との単純なテキストファイルを同期することはできません

{NSFilePath = /民間の/ var /モバイル/ライブラリ/モバイルドキュメント/ 4C224W52W5〜COM〜piso13〜opusDomini/currentLogPath、NSUnderlyingError = 0xde9b460 "操作を完了できcouldn,Äôt。不正なファイルディスクリプタ"}

これはこれは私がそれを作成する方法

-(BOOL)createLogFolderFile{   

    NSString *uuid = nil; 

    CFUUIDRef uuidRef = CFUUIDCreate(nil); 

    uuid = (NSString*)CFUUIDCreateString(nil, uuidRef); 

    CFRelease(uuidRef);  



    NSError *error = nil; 

    [uuid writeToFile:[self filePath] atomically:NO encoding:NSUTF8StringEncoding error:&error]; 

    if (error) { 

     NSLog(@"Error trying to create log file %@", error);   

     return FALSE; 

    } 

    else{ 

     return TRUE; 

    } 

} 

-(NSString*)filePath{ 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSString *iCloudPath = [[fileManager URLForUbiquityContainerIdentifier:nil] path]; 

    return [iCloudPath stringByAppendingPathComponent:LOG_FOLDER_FILE_NAME]; 

} 

ですどのように私はそれを読む:

-(NSString*)readLogFolderFromFile{ 

    NSError *error = nil; 

    NSString *logFolder = [NSString stringWithContentsOfFile:[self filePath] encoding:NSUTF8StringEncoding error:&error]; 

    if (error) { 

     NSLog(@"Error when trying to read log folder from file: %@" ,error); 

     return nil; 

    } 

    else{ 

     return logFolder; 

    } 

} 

私はNSMetadataQueryを使用してファイルを検索しています。 通知クエリは、情報結果の収集を完了しています。

ヘルプ?

+0

'filePath'メソッドでは、' iCloudPath'変数にどのような値を代入していますか? –

+0

また、読んだり書いたりするときにそのエラーが発生していますか? –

+0

iCloudPathは/ private/var/mobile/Library/Mobile Documents/4C224W52W5〜com〜piso13〜opusDominiを取得します。 –

答えて

5

ファイルがダウンロードされませんでした。 NSMetadataQueryはクラウド内のファイルの存在を通知するようです。実際にファイルを取得するには、余分なコードが必要とされている:

インサイドqueryDidFinishGathering通知:

NSMetadataItem *item = [query resultAtIndex:0]; 
     self.metadataItem = item; 
     BOOL isDownloaded = [[item valueForAttribute:NSMetadataUbiquitousItemIsDownloadedKey]boolValue]; 

    if (!isDownloaded) { 
     NSError *error = nil; 
     [[NSFileManager defaultManager] startDownloadingUbiquitousItemAtURL: [item valueForAttribute:NSMetadataItemURLKey] error:&error]; 
     NSLog(@"Start downloading file"); 
     if (error) { 
      NSLog(@"Error trying to download file: %@", error); 
     } 
     else{ 
      [self lookForLogFolderFile]; 
      return; 
     } 

    } 

lookForLogFolderFileは、もう一度、クエリを開始します。 いくつかの呼び出しの後、アイテムがダウンロードされます。各呼び出しの間にタイマーを使用して、NSMetadataQueryを開始することもできます。私の場合は、1行のテキストファイルです。

関連する問題