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

Sab*_*bby 1 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];


}
Run Code Online (Sandbox Code Playgroud)

请帮帮我,如何保存多个图像,文件等捆绑

提前致谢

Tom*_*mmy 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];
Run Code Online (Sandbox Code Playgroud)

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

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

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