NSData *data;
data = [self fillInSomeStrangeBytes];
私の質問は、ファイルへの最も簡単な方法でこのdata
をどのように書くことができるかです。
(私はすでにNSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes
)
NSData
には、あなたがやりたいことを正確に行うwriteToURL:atomically:
というメソッドがあります。 NSData
のドキュメント を見て、使用方法を確認してください。
ファイルへのNSData
の書き込みは、メインスレッドをブロックする可能性のあるIO操作です。特にデータオブジェクトが大きい場合は注意してください。
したがって、バックグラウンドスレッドでこれを実行することをお勧めします。最も簡単な方法は、GCDを次のように使用することです。
// Use GCD's background queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Generate the file path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"yourfilename.dat"];
// Save it into file system
[data writeToFile:dataPath atomically:YES];
});
writeToURL:atomically: または writeToFile:atomically: URLの代わりにファイル名がある場合。
writeToFile:options:error:
または writeToURL:options:error:
何らかの理由でNSData
の保存に失敗した場合にエラーコードを報告できます。例えば:
NSError *error;
NSURL *folder = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error];
if (!folder) {
NSLog(@"%s: %@", __FUNCTION__, error); // handle error however you would like
return;
}
NSURL *fileURL = [folder URLByAppendingPathComponent:filename];
BOOL success = [data writeToURL:fileURL options:NSDataWritingAtomic error:&error];
if (!success) {
NSLog(@"%s: %@", __FUNCTION__, error); // handle error however you would like
return;
}