2011-12-06 6 views
0
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:currentVideoDownload]; 

filePath = [filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
[responseData writeToFile:filePath atomically:YES]; 

NSError *error; 

NSData *mediaData = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMapped error:&error]; 

NSLog(@"Length:%d Error:%@",[mediaData length],[error localizedDescription]); 

LOG value: Length:0 Error: The operation could not be completed. (Cocoa error 60)NSData長はゼロですか?エラー:ココアエラー60

データは、ファイルパスを適切に保存されているが、同じパスからデータをフェッチは、ゼロを取得中。

ありがとうございます。

+2

'-writeToFile:atomically:'の戻り値をチェックしていないと、データが正しく保存されていることをどのように知っていますか?ファイルパスに '-stringByAppendingPercentEscapesUsingEncoding:'を使ってもいいですか?たぶん '-stringByExpandingTildeInPath:'がより適切です... 'error.userInfo'を記録して、読み込み操作が失敗した理由の詳細を取得することもできます。 –

+0

@MichaelDautermann ...ありがとう.. responseDataは、サーバーから来るデータです...メソッドconnectionDidFinishLoading:。私はシミュレータ上でテストしています... responseDataはパスに正常に書き込みます。つまり、filePathです。私がそのパスに行くと、私は手動でファイルを再生することができます。しかし、NSDataを取得するために同じファイルパスを使用しているときは、ゼロを取得します。 – iDilip

+0

@ MarkAdams ....ありがとう...私はerror.userInfoを使用しました。エラー:{ NSFilePath = "/ Users/Altu /ライブラリ/アプリケーション%20Support/iPhone%20Simulator/5.0/Applications/75D3B5E2-C6BD-46B3-8F61-1FAC3D291070/Documents/test.mp4 "; NSUnderlyingError = "エラードメイン= NSPOSIXErrorDomainコード= 2 \"操作を完了できませんでした。そのようなファイル、又はディレクトリはありません\"" – iDilip

答えて

2

問題は、書き込み可能なファイルパスに書き込んでいないことです。これは、ファイルパスをエスケープする必要があるためであり、実際には、エスケープされたパスが存在しない場合にIO読み書きが失敗する可能性が高いためです。パーセントエスケープは、HTTP要求または関連するNSURL操作にのみ使用する必要があります。

filePath = [filePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
関連する問題