ウェブサービスリクエストでバイトデータを受け取り、iOSデバイスのファイルに書き込むことが必要な状況があります。これは、データのサイズが小さいために正常に動作しますNSFileHandle&iOSのファイルにAsynchを書き込む
stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
:私は、メソッドを使用して、私のiOSデバイス内のファイルにNSStream
を使用してデータを書き込むメモリ変数にし、最後に(データの最後まで)全てのデータを付加するために使用しましたしかし、問題は、私が大きなチャンク(カップルのMB)である可能性があるWebサービスを介してデータを受信している場合、私はそれを効率的にするために、ファイルに書き込むためにすべてをメモリに集めたくないということです。 NSFileHandle
に切り替えると、小さいチャンクサイズのデータを同じファイルに複数回書き込むことができます。今私の質問はこれを行うための最良のアプローチは何ですか?私は、NSFileHandle
を使って、BACKGROUNDのファイルにどのように書き込むことができますか?私はこのようなコードを使用:
- (void) setUpAsynchronousContentSave:(NSData *) data {
NSString *newFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/MyFile.xml"];
if(![[NSFileManager defaultManager] fileExistsAtPath:newFilePath ]) {
[[NSFileManager defaultManager] createFileAtPath:newFilePath contents:nil attributes:nil];
}
if(!fileHandle_writer) {
fileHandle_writer = [NSFileHandle fileHandleForWritingAtPath:newFilePath];
}
[fileHandle_writer seekToEndOfFile];
[fileHandle_writer writeData:data];
}
が、上記の方法に1-2メガビットのデータサイズを渡すと、私はそれがバックグラウンドで実行されているようにする必要がありますか?参考までに私はメインスレッドで書いています。
うまくいきません!私が "setUpAsynchronousContentSave"を2回目に呼び出す場合、同じNSFileHandleを使って同じファイルにデータを追加するのは正しい方法ではないでしょう。 – Cam
OK、私は私の答えを改善します。 – vampirewalk
明日もう一度チェックします。ありがとうございました – Cam