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:原子:writeToFile:原子: 如果你有一个文件,而不是一个网址。

你也有 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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top