70
NSData *data;
data = [self fillInSomeStrangeBytes];

我现在的问题是如何data以最简单的方式将其写入文件。

(我已经有一个 NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes

4

4 回答 4

101

NSData有一个名为的方法writeToURL:atomically:,它完全可以满足您的需求。查看文档NSData以了解如何使用它。

于 2009-03-24T20:30:30.890 回答
38

请注意,写入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];
});
于 2014-05-26T06:09:25.863 回答
30

writeToURL:atomically:writeToFile:atomically:如果你有文件名而不是 URL。

于 2009-03-24T20:31:32.230 回答
3

如果由于任何原因保存失败,您也有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;
}
于 2018-02-15T18:11:22.803 回答