Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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_Objective C_Video_Nsdocumentdirectory_Phasset - Fatal编程技术网

Ios 如何将多个视频保存到应用程序文档目录中?

Ios 如何将多个视频保存到应用程序文档目录中?,ios,objective-c,video,nsdocumentdirectory,phasset,Ios,Objective C,Video,Nsdocumentdirectory,Phasset,我正在使用GMImagePicker获取相机卷的资产。 在选择了单个或多个视频后,我在arrayArray中获得了PHAsset。 此格式中的assetArray数据 "<PHAsset: 0x7fe0e8f21130> 40D4733D-4C7B-443D-8093-C28E39ACA45E/L0/001 mediaType=2/0, sourceType=1, (720x480), creationDate=2016-02-14 09:50:58 +0000, location

我正在使用GMImagePicker获取相机卷的资产。 在选择了单个或多个视频后,我在arrayArray中获得了PHAsset。 此格式中的assetArray数据

 "<PHAsset: 0x7fe0e8f21130> 40D4733D-4C7B-443D-8093-C28E39ACA45E/L0/001 mediaType=2/0, sourceType=1, (720x480), creationDate=2016-02-14 09:50:58 +0000, location=0, hidden=0, favorite=0 " 
我还检查了保存视频的文件路径。视频是可用的,但我得到这个错误

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

请帮我解决这个问题。

根据我的说法,使用NSMutableData而不是NSData它是接受可为空的值

self.responseData = [NSMutableData dataWithContentsOfURL:location];
if (self.responseData.length>0) {
        dispatch_async(dispatch_get_main_queue(), ^{
        NSString * lastPath = [url.absoluteString lastPathComponent];//videoname.mp4
        NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)objectAtIndex:0];
        NSString *filePath = [NSString stringWithFormat:@"%@/%@",docDirPath,lastPath];
            [self.responseData writeToFile:filePath atomically:YES];
}
    });

希望这对您有所帮助。

用于存储图像和视频

 for (PHAsset *asset in assetArray) {

        if (asset.mediaType==PHAssetMediaTypeVideo) {
            NSLog(@"Video found");

            PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
            options.version = PHVideoRequestOptionsVersionOriginal;

            [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {

                if ([asset isKindOfClass:[AVURLAsset class]]) {
                    NSURL *URL = [(AVURLAsset *)asset URL];
                   [Albumvideos addObject:URL];
                    NSData *videoData = [NSData dataWithContentsOfURL:URL];
                    if (videoData.length>0) {
                        NSString *lastPath = [URL.absoluteString lastPathComponent];
                        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                        NSString *documentsDirectory = [paths objectAtIndex:0];
                        NSFileManager *fileManager = [NSFileManager defaultManager];
                        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@",TimeStamp,lastPath]];
                        [fileManager createFileAtPath:fullPath contents:videoData attributes:nil];   
                    }
                }
            }]; 
        }
else{

    self.requestOptions = [[PHImageRequestOptions alloc] init];
    self.requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
    self.requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

    // this one is key
    self.requestOptions.synchronous = true;

    //  self.assets = [NSMutableArray arrayWithArray:assets];
    PHImageManager *manager = [PHImageManager defaultManager];

    // assets contains PHAsset objects.
    __block UIImage *ima;


        // Do something with the asset

        [manager requestImageForAsset:asset
                           targetSize:PHImageManagerMaximumSize
                          contentMode:PHImageContentModeDefault
                              options:self.requestOptions
                        resultHandler:^void(UIImage *image, NSDictionary *info) {
                            ima = image;

                            [Albumimages addObject:ima];

                        }];

}
}

Albumvideos是包含视频URL的可变数组,Albumimages包含选定的图像。

请提供完整的错误日志。或者在任何浏览器上检查您的url。是否正在下载数据?由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[\uu NSArrayM insertObject:atIndex:]:对象不能为零”我在safari中检查了URL。它在最后一行完全运行videoAt[self.responseData writeToFile:filePath atomicaly:YES];NSURL*URL=[(AVURLAsset*)资产URL];请检查此URL对象。它是否与您的视频具有相同的url?
 for (PHAsset *asset in assetArray) {

        if (asset.mediaType==PHAssetMediaTypeVideo) {
            NSLog(@"Video found");

            PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
            options.version = PHVideoRequestOptionsVersionOriginal;

            [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {

                if ([asset isKindOfClass:[AVURLAsset class]]) {
                    NSURL *URL = [(AVURLAsset *)asset URL];
                   [Albumvideos addObject:URL];
                    NSData *videoData = [NSData dataWithContentsOfURL:URL];
                    if (videoData.length>0) {
                        NSString *lastPath = [URL.absoluteString lastPathComponent];
                        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                        NSString *documentsDirectory = [paths objectAtIndex:0];
                        NSFileManager *fileManager = [NSFileManager defaultManager];
                        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@",TimeStamp,lastPath]];
                        [fileManager createFileAtPath:fullPath contents:videoData attributes:nil];   
                    }
                }
            }]; 
        }
else{

    self.requestOptions = [[PHImageRequestOptions alloc] init];
    self.requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
    self.requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

    // this one is key
    self.requestOptions.synchronous = true;

    //  self.assets = [NSMutableArray arrayWithArray:assets];
    PHImageManager *manager = [PHImageManager defaultManager];

    // assets contains PHAsset objects.
    __block UIImage *ima;


        // Do something with the asset

        [manager requestImageForAsset:asset
                           targetSize:PHImageManagerMaximumSize
                          contentMode:PHImageContentModeDefault
                              options:self.requestOptions
                        resultHandler:^void(UIImage *image, NSDictionary *info) {
                            ima = image;

                            [Albumimages addObject:ima];

                        }];

}
}