Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-将多个图像保存到文档文件夹_Ios_Camera_Nsdocumentdirectory - Fatal编程技术网

iOS-将多个图像保存到文档文件夹

iOS-将多个图像保存到文档文件夹,ios,camera,nsdocumentdirectory,Ios,Camera,Nsdocumentdirectory,我有这段代码这段代码将图像保存到Documents文件夹 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *savedImagePath = [documentsDirectory

我有这段代码这段代码将图像保存到Documents文件夹

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,        NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *savedImagePath = [documentsDirectory  stringByAppendingPathComponent:@"savedImage.png"];
    UIImage *image = imageView.image; // imageView is my image from camera
    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:savedImagePath atomically:NO]; 
我正在寻找一种能够保存多幅图像的方法,因为这幅图像一直在写savedImage.png名称

我不介意在谷歌或其他网站上查找它,但我需要知道它叫什么,因为用错误的关键字查找确实会耽误整个世界:-)


干杯

您需要更改添加到第三行图像文档目录路径的文件名。每次您都需要使用尚未使用的不同名称。NSFileManager具有查看文件是否存在的方法,因此您可以构造文件名,然后测试该位置是否存在该文件,如果存在,请增加重复计数并尝试下一个

如果
num
是一个整数,您可以在某处定义并保留它,这样您就可以知道最后一个您认为使用的整数(并且您在某处已初始化为1)


您必须查找语法才能获得NSFileManager实例和确切的file exists方法签名,但这是其要点。

每次都可以创建一个新文件来完成此操作

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"YOURiMAGEfILE.IMAGEeXTENSION"];
NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path]) 
    {
        path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"YOURiMAGEfILE.IMAGEeXTENSION] ];
    }

然后,您可以对创建的文件执行上述操作。

如果使用当前日期时间保存文件,则无需担心同名覆盖问题

-(NSString*)getCurrentDateTimeAsNSString
{
    NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setDateFormat:@"yyyyMMddHHmmss"];
    NSDate *now = [NSDate date];
    NSString *retStr = [format stringFromDate:now];
    [format release];

    return retStr;
}

希望它能帮助你为我工作

if let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
        let i = Int(arc4random())

        let str = String(i).appending(".png")

        let fileManager = FileManager.default
        let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(str)

        print(paths)

        let imageData = UIImagePNGRepresentation(image)
        fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)
    }
    else{
        print("error")

    }

你想把每个图像保存到一个不同的文件中吗?这不是一个简单的方法,但我不知道如何整理你给我的代码中的while部分。我第一次遇到这种情况,很抱歉:-)想一想:在文件系统中,如果您将第二个文件以相同的名称放在相同的位置,它将替换现有的文件,对吗?如果要将其保存在同一位置,则必须为其指定另一个名称。在Finder中,Finder将通过在文件名后添加一个数字或“副本”(当您复制文件名时)自动执行此操作。上面的代码只是试图向您展示这一点,并建议您在末尾添加一个数字。请阅读您不理解的上述部分的文档。e、 例如,
stringWithFormat:
NSFileManager
等。您必须学习阅读文档以了解现有类的功能和工作方式。Rishi上面关于附加日期的回答也是一个选项,可能会更容易,因为你不必测试它是否已经存在(如果包括毫秒)。如果我们不理解你的问题,那么可以尝试澄清一些。你理解了问题,我已经实现了你的解决方案。在while部分,我刚刚输入了(nil),直到我解决了这个问题。很抱歉,我无法将这个解决方案用于我需要的工作。也许我误解了:-)虽然答案总是受欢迎的,但请简要说明上述方法是如何解决问题的。
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
        let i = Int(arc4random())

        let str = String(i).appending(".png")

        let fileManager = FileManager.default
        let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(str)

        print(paths)

        let imageData = UIImagePNGRepresentation(image)
        fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)
    }
    else{
        print("error")

    }