Ios 当用户不使用';在设备上没有电子邮件帐户

Ios 当用户不使用';在设备上没有电子邮件帐户,ios,objective-c,uiactivityviewcontroller,Ios,Objective C,Uiactivityviewcontroller,当我试图通过电子邮件使用UIActivityViewController共享pdf文档时出现问题 当用户配置了他的电子邮件共享后,其显示的文档会很好地工作,但是当用户之前没有配置电子邮件帐户时,它会提示用户选择电子邮件提供商,如果我配置了电子邮件帐户,则会显示新的电子邮件,但没有附加文档。如果我在配置电子邮件后再试一次,效果会很好 我在iOS 9和iOS 10上进行了测试,它给了我同样的问题 这是我关于目标C的代码: NSString *file = [NSString stringWithFo

当我试图通过电子邮件使用UIActivityViewController共享pdf文档时出现问题

当用户配置了他的电子邮件共享后,其显示的文档会很好地工作,但是当用户之前没有配置电子邮件帐户时,它会提示用户选择电子邮件提供商,如果我配置了电子邮件帐户,则会显示新的电子邮件,但没有附加文档。如果我在配置电子邮件后再试一次,效果会很好

我在iOS 9和iOS 10上进行了测试,它给了我同样的问题

这是我关于目标C的代码:

NSString *file = [NSString stringWithFormat:@"file://%@", items[0][@"source"]];

NSURLRequest *urlRequestToLoad = [NSURLRequest requestWithURL:[NSURL                                                                                                                                     URLWithString:file] cachePolicy:NSURLRequestUseProtocolCachePolicy 
timeoutInterval:60.0];

NSArray *sharingItems = @[items[0][@"filename"], [urlRequestToLoad URL]];

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];

[activityController setValue:@"Your email Subject" forKey:@"subject"];
[self.viewController presentViewController:activityController animated:YES completion:nil];
知道我做错了什么吗?

是的!简单解决方案:)下载并附加文件。如果您之前在webview中加载PDF,请查看下面的评论

    -(void)print:(NSString*)subject withFileName:(NSString*)fileName webFileURL:(NSURL*)webURL{

        if ([UIActivityViewController class]) {

            if (subject) {

                NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
                NSString *title = [fileName stringByReplacingOccurrencesOfString:@" " withString:@"_"];;
                title = [NSString stringWithFormat:@"%@.pdf",title];

                NSString * filePath = [documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@",title];

                // Showing spinner
                NSURLRequest *request = [NSURLRequest requestWithURL:webURL];
                [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                    // Close the spinner
                    if (error) {
                        NSLog(@"Download Error:%@",error.description);
                    }
                    if (data) {
                        [data writeToFile:filePath atomically:YES];
                        dispatch_async(dispatch_get_main_queue(), ^ {

                            /* Set this available field on the activity controller */
                            NSMutableArray *items = [NSMutableArray array];

                            if (data) {
                                [items addObject:[NSURL fileURLWithPath:filePath]];
                            } 

                            // Print webView
                            // {
                            //     [items addObject:[self.webViewInstance viewPrintFormatter]];
                            // }

                            if (webURL) {
                                [items addObject:[NSString stringWithFormat:@"%@ - %@",subject, [webURL absoluteString]];
                            }

                            UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];

                            [activityViewController setValue:subject forKey:@"subject"]; // Set the mail subject.

                             // If you are not handle it. It will crash in iPad 
                            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
                                activityViewController.modalPresentationStyle = UIModalPresentationPopover;
                                UIPopoverPresentationController *popPC = activityViewController.popoverPresentationController;
                                popPC.sourceView = self.view;
                                popPC.sourceRect = kSharePopArea;
                                popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
                            }
                            [self presentViewController:activityViewController animated:YES completion:nil];
                        });
                    }
                }];
            }
        }
    }

        NSString *content = @"write text here";

        NSError* lError;
        NSMutableArray *items = [NSMutableArray array];
        if ([NSData dataWithContentsOfURL:fileUrl options:NSDataReadingMappedAlways error:&lError]) // Local file
        {
            [items addObject:fileUrl];
        }

        if(content) {
             [items addObject:content];
        }

         if(imagename && [UIImage imageNamed:@"imagename"]) {
             [items addObject:[UIImage imageNamed:@"imagename"]];
        }


        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];

        // Add email subject.
        [activityViewController setValue:@"Your email Subject" forKey:@"subject"];


        // If you are not handle it. It will crash in iPad 
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            activityViewController.modalPresentationStyle = UIModalPresentationPopover;
            UIPopoverPresentationController *popPC = activityViewController.popoverPresentationController;
            popPC.sourceView = self.view;
            popPC.sourceRect = kSharePopArea;
            popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
        }


        [self presentViewController:activityViewController animated:YES completion:nil];
是的!简单解决方案:)下载并附加文件。如果您之前在webview中加载PDF,请查看下面的评论

    -(void)print:(NSString*)subject withFileName:(NSString*)fileName webFileURL:(NSURL*)webURL{

        if ([UIActivityViewController class]) {

            if (subject) {

                NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
                NSString *title = [fileName stringByReplacingOccurrencesOfString:@" " withString:@"_"];;
                title = [NSString stringWithFormat:@"%@.pdf",title];

                NSString * filePath = [documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@",title];

                // Showing spinner
                NSURLRequest *request = [NSURLRequest requestWithURL:webURL];
                [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                    // Close the spinner
                    if (error) {
                        NSLog(@"Download Error:%@",error.description);
                    }
                    if (data) {
                        [data writeToFile:filePath atomically:YES];
                        dispatch_async(dispatch_get_main_queue(), ^ {

                            /* Set this available field on the activity controller */
                            NSMutableArray *items = [NSMutableArray array];

                            if (data) {
                                [items addObject:[NSURL fileURLWithPath:filePath]];
                            } 

                            // Print webView
                            // {
                            //     [items addObject:[self.webViewInstance viewPrintFormatter]];
                            // }

                            if (webURL) {
                                [items addObject:[NSString stringWithFormat:@"%@ - %@",subject, [webURL absoluteString]];
                            }

                            UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];

                            [activityViewController setValue:subject forKey:@"subject"]; // Set the mail subject.

                             // If you are not handle it. It will crash in iPad 
                            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
                                activityViewController.modalPresentationStyle = UIModalPresentationPopover;
                                UIPopoverPresentationController *popPC = activityViewController.popoverPresentationController;
                                popPC.sourceView = self.view;
                                popPC.sourceRect = kSharePopArea;
                                popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
                            }
                            [self presentViewController:activityViewController animated:YES completion:nil];
                        });
                    }
                }];
            }
        }
    }

        NSString *content = @"write text here";

        NSError* lError;
        NSMutableArray *items = [NSMutableArray array];
        if ([NSData dataWithContentsOfURL:fileUrl options:NSDataReadingMappedAlways error:&lError]) // Local file
        {
            [items addObject:fileUrl];
        }

        if(content) {
             [items addObject:content];
        }

         if(imagename && [UIImage imageNamed:@"imagename"]) {
             [items addObject:[UIImage imageNamed:@"imagename"]];
        }


        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];

        // Add email subject.
        [activityViewController setValue:@"Your email Subject" forKey:@"subject"];


        // If you are not handle it. It will crash in iPad 
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            activityViewController.modalPresentationStyle = UIModalPresentationPopover;
            UIPopoverPresentationController *popPC = activityViewController.popoverPresentationController;
            popPC.sourceView = self.view;
            popPC.sourceRect = kSharePopArea;
            popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
        }


        [self presentViewController:activityViewController animated:YES completion:nil];

我认为你所做的一切都可以,它就是这样工作的。你想共享本地文档吗?它是本地文档。我认为你所做的一切都可以,它就是这样工作的。你想共享本地文档吗?它是本地文档。它是本地文档,我不需要下载。它是本地文档,我不需要下载。