如何在iPhone应用程序中保存多个文件?

时间:2010-11-08 11:08:12

标签: iphone

大家好我正在尝试将图像保存在我目前在我视图中的图像集中,但问题是我只能保存一个图像,如果我想保存另一个图像它取代了旧图像。我不是然后得到如何保存捆绑中的多个图像。 这是我的代码。

- (void)writeImageToDocuments:(UIImage*)image 
{
    NSData  *png = UIImagePNGRepresentation(image); 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSError *error = nil;
    [png writeToFile:[documentsDirectory stringByAppendingPathComponent:@"image.png"] options:NSAtomicWrite error:&error];


}

请帮帮我,如何保存多个图片,文件e.t.c捆绑

提前致谢

1 个答案:

答案 0 :(得分:5)

您没有保存到捆绑包中,而是保存到应用程序的文档目录中。它没有捆绑方面。

您为保存的每个文件使用文件名@“image.png”。因此,每个新的写入都会覆盖旧的写入。实际上,您将每个文件写入两次。要保存多个文件,请使用不同的文件名。

传递数字常量作为NSData writeToFile的'options:'参数也是错误的形式:options:error :(或者实际上,任何类似的情况)。值“3”包含未定义的标志,因此您应该预期未定义的行为,Apple可以合法地拒绝批准您的应用程序。可能你想要保留NSAtomicWrite行并杀死它之后的那个。

如果您只是想找到第一个未使用的image.png文件名,最简单的解决方案就是:

int imageNumber = 0;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *pathToFile;

do
{
    // increment the image we're considering
    imageNumber++;

    // get the new path to the file
    pathToFile = [documentsDirectory stringByAppendingPathComponent:
                                           [NSString stringWithFormat:
                                                    @"image%d.png", imageNumber]];
}
while([fileManager fileExistsAtPath:pathToFile]);
/* so, we loop for as long as we keep coming up with names that already exist */

[png writeToFile:pathToFile options:NSAtomicWrite error:&error];

这有一个潜在的缺点;您尝试的所有文件名都在自动释放池中。因此,至少在这种特定方法退出之前,它们将保留在内存中。如果你最终尝试了数千个,那可能会成为一个问题 - 但它与答案没有直接关系。

假设您总是添加新文件但从不删除文件,那么您可以通过二进制搜索更好地解决此问题。

搜索到的文件名将为image1.png,image2.png等