UIActivityViewController通过电子邮件分享图片没有扩展名。

7
附加的图片只是“Attachment-1”,没有扩展名。如何指定扩展名?
    NSData *compressedImage = UIImageJPEGRepresentation(self.resultImage, 0.8 );

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[ @"Check this out!", compressedImage ] applicationActivities:nil];

    [self.navigationController presentViewController:activityViewController animated:YES completion:nil];
2个回答

14
根据这个答案,你应该能够使用这个解决方法来指定文件名。
NSData *compressedImage = UIImageJPEGRepresentation(self.resultImage, 0.8 );
NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imagePath = [docsPath stringByAppendingPathComponent:@"image.jpg"];
NSURL *imageUrl     = [NSURL fileURLWithPath:imagePath];

[compressedImage writeToURL:imageUrl atomically:YES]; // save the file
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[ @"Check this out!", imageUrl ] applicationActivities:nil];

这种方法的明显缺点是你必须将图像保存到磁盘上。


1
谢谢,那应该可以工作了。很烦人的是,苹果没有更认真地考虑这种功能。Google的某个人需要给他们上一课关于沙盒应用程序互操作性方面的知识,自从Intents开始,Android一直做得非常好。... 叹气 希望iOS 7能改变它。 - Amir Memon
这也有助于共享.png文件!当您仅共享UIImage时,它会自动转换为jpeg。非常好的解决方案! - Klaas
3
如果在activityItems数组中传递图像的NSData,它也可以工作。您不需要实际写入文件。 - Jamie Hamick
@timeuser 但是它不允许您更改文件名,除了默认的image1.jpg? - Peterdk
这对我似乎不起作用。如果我将文件名传递给活动项目数组,那么它只会尝试保存两个文件……一个是包含名称的文本文档,另一个是我要保存的实际文件/数据。 - user3344977

0

感谢timeuser的建议,将UIImage转换为NSData。

NSData * data = UIImageJPEGRepresentation(original,1.0);
UIActivityViewController * activity =[[UIActivityViewController alloc] initWithActivityItems:@[@"Your Text", data] applicationActivities:nil];
[self presentViewController:activity animated:true completion:^{ }];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接