8

NSOutputStream を使用してデータを蓄積し、終了したら、その内容で NSData オブジェクトを作成します。次のように、出力ストリームがファイルに基づいている場合に実行できます。

NSString *tmpDirectory = NSTemporaryDirectory();
NSString *filePath = [tmpDirectory stringByAppendingPathComponent:@"tempfile"];
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
NSOutputStream *outputStream = [[NSOutputStream alloc] initToFileAtPath:filePath append:NO];     [outputStream open];

// fill the output stream here

NSData *contents = [NSData dataWithContentsOfFile:filePath];
[outputStream close];

一時ファイルを作成せずに「contents」変数を埋めたい。これをすべてメモリ内で実行できますか?NSOutputStream のドキュメントには、そのための API がありません。

4

1 に答える 1

16

見つけにくいドキュメントに従って、最初に出力ストリームをメモリで初期化してから、キーNSStreamDataWrittenToMemoryStreamKeyを使用してpropertyForKeyメソッドを呼び出します。

あなたの例:

NSOutputStream *outputStream = [[NSOutputStream alloc] initToMemory];
[outputStream open];

// fill the output stream somehow

NSData *contents = [outputStream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
[outputStream close];
于 2014-05-28T21:29:33.870 に答える