调用writeToFile时防止覆盖:

时间:2013-07-11 16:54:12

标签: ios objective-c cocoa-touch memory writetofile

每次按下保存按钮时,我都会尝试将图像保存到磁盘。这是我正在使用的代码:

NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:@"piclogs"];

[pdfData writeToFile:documentDirectoryFilename atomically:YES];

现在,显然每次调用此方法时,要保存的文件都会覆盖以前保存的文件。我正试图找到一种方法来存储在那里拍摄的每张照片,而不是每次都覆盖它。有谁知道是否有一个简单的解决方案来实现这一目标?我浏览了文档但找不到任何相关内容。

2 个答案:

答案 0 :(得分:2)

使用NSUUIDCFUUIDCreate创建可用于文件的唯一名称。

答案 1 :(得分:1)

或者您可以检查具有该名称的文件是否存在以及它是否不写入文件。然后根据需要更改名称,这样您就可以获得可能或可能不会保存的内容的副本。

NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:@"piclogs"];
if (![NSURL fileURLWithPath:[self documentsPathForFileName:documentDirectoryFilename]]) {
    [pdfData writeToFile:documentDirectoryFilename atomically:YES];
} else {
    NSString* altName = [NSString stringWithFormat:@"%@-%d", documentDirectoryFilename, intValue];
    [pdfData writeToFile:altName atomically:YES];
}