大家好我正在尝试将图像保存在我目前在我视图中的图像集中,但问题是我只能保存一个图像,如果我想保存另一个图像它取代了旧图像。我不是然后得到如何保存捆绑中的多个图像。 这是我的代码。
- (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捆绑
提前致谢
答案 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等