Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 使用UIActivityViewController共享视频时未为邮件附加视频_Ios_Objective C_Email_Video_Uiactivityviewcontroller - Fatal编程技术网

Ios 使用UIActivityViewController共享视频时未为邮件附加视频

Ios 使用UIActivityViewController共享视频时未为邮件附加视频,ios,objective-c,email,video,uiactivityviewcontroller,Ios,Objective C,Email,Video,Uiactivityviewcontroller,我正在使用下面的代码共享设备上的视频,它非常适合通过消息、facebook和iCloud进行共享,但不适用于邮件,我可以看到邮件选项在那里,但在邮件草稿中,视频没有附加 在代码中,videoAsset是类型为PHAssetMediaTypeVideo的PHAsset [[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAud

我正在使用下面的代码共享设备上的视频,它非常适合通过消息、facebook和iCloud进行共享,但不适用于邮件,我可以看到邮件选项在那里,但在邮件草稿中,视频没有附加

在代码中,
videoAsset
是类型为
PHAssetMediaTypeVideo
PHAsset

[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
    AVURLAsset* urlAsset = (AVURLAsset*)asset;
    fileUrl = urlAsset.URL;
    NSLog(@"fileUrl is %@",fileUrl);

    NSArray *activityItems = [NSArray arrayWithObjects:fileUrl, nil];

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:activityViewController animated:YES completion:nil];
}];

如果我使用
UIImagePickerController
附加视频,它可以工作,我搜索了但找不到答案,请帮助。

我最终将视频文件保存到文档目录,并使用文档目录中的文件url,附加视频以通过邮件共享

[[PHImageManager defaultManager] requestImageDataForAsset:videoAsset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
    NSLog(@"info is %@", info);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"IMG_2185.MOV"];

    NSError *error;
    [[NSFileManager defaultManager] removeItemAtPath:videoPath error:&error];
    BOOL success = [imageData writeToFile:videoPath atomically:YES];
    if (success) {
        NSArray *activityItems = [NSArray arrayWithObjects:[NSURL fileURLWithPath:videoPath], nil];

        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
        [self presentViewController:activityViewController animated:YES completion:nil];
    }
}];
我还使用了
requestExportSessionForVideo
方法将视频导出到文档目录,这同样有效

[[PHImageManager defaultManager] requestExportSessionForVideo:videoAsset options:nil exportPreset:AVAssetExportPresetPassthrough resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"test3.MOV"];
    NSFileManager *manager = [NSFileManager defaultManager];

    NSError *error;
    if ([manager fileExistsAtPath:videoPath]) {
        BOOL success = [manager removeItemAtPath:videoPath error:&error];
        if (success) {
            NSLog(@"I successfully removed it!");
        }
    }

    NSURL *outputURL = [NSURL fileURLWithPath:videoPath];
    NSLog(@"this is the final path %@",outputURL);
    exportSession.outputFileType=AVFileTypeQuickTimeMovie;
    exportSession.outputURL=outputURL;

    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        if (exportSession.status == AVAssetExportSessionStatusFailed) {
            NSLog(@"failed");
        } else if(exportSession.status == AVAssetExportSessionStatusCompleted){
            NSLog(@"completed!");
                dispatch_async(dispatch_get_main_queue(), ^(void) {
                    NSArray *activityItems = [NSArray arrayWithObjects:outputURL, nil];

                    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
                    [self presentViewController:activityViewController animated:YES completion:nil];
                    //Main

                });


        }
    }];
}];

您是否有关于如何使用
requestExportSessionForVideo
的片段?我正在尝试使用它,但outputURL总是为零。谢谢哎呀,哎呀,哎呀!我花了这么多时间尝试,却没有运气!非常非常感谢如何分享几个视频?使用for loop并导出所有视频?@HwanghoKim,还没有尝试过,但是
activityItems
是一个数组,您可以尝试向其中添加多个视频。因此,共享后,视频是否从文档目录中删除?如何处理?@mitulmarsonia what?UIActivityViewController中显示的选项完全取决于要共享的项目类型。例如,如果有视频,它将不会显示Facebook或twitter选项。但是如果是图片和标题,它肯定会显示相关选项。下面将显示邮件、推特、Facebook、assignToContact、保存到相机、打印、复制等应用程序,etc@mitulmarsonia,如果有视频,它将不会显示Facebook或twitter选项,这是不对的,对我来说,会显示Facebook,我可以将视频共享到Facebook,问题是当我共享视频时,会显示mail选项,但是,当我试图发送邮件时,视频没有附加,接收者也没有收到视频。