UIActivityViewController与微信共享图像无法正常工作

cat*_*lee 7 iphone objective-c ios wechat

当我用Apple的手机UIActivityViewController分享一些图片给WeChat(微信)时.我发现有时它不起作用.大多数情况下,当我只选择1~3张图像时效果很好,但如果我共享9张图像(微信允许的最大数量),它肯定会失败,控制台会打印出来

2016-04-01 16:14:34.258 EverPhoto [5567:1981394]插件com.tencent.xin.sharetimeline中断2016-04-01 16:14:34.258 EverPhoto [5567:1981394]插件com.tencent.xin.sharetimeline无效

这是代码:

__weak typeof(self) __weakSelf = self;
self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:self.shareItems applicationActivities:nil];
self.activityViewController.excludedActivityTypes = @[UIActivityTypePostToFacebook,
                                     UIActivityTypePostToTwitter,
                                     UIActivityTypePostToVimeo,
                                     UIActivityTypePostToTencentWeibo,
                                     UIActivityTypePrint,
                                     UIActivityTypeCopyToPasteboard,
                                     UIActivityTypeAssignToContact,
                                     UIActivityTypeSaveToCameraRoll,
                                     UIActivityTypeAddToReadingList,
                                     UIActivityTypePostToFlickr,
                                     ];
self.activityViewController.completionWithItemsHandler = ^(NSString * __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){
    DLog(@"shareCompleted : %@", completed ? @"YES" : @"NO")
    __weakSelf.shareItems = nil;
    __weakSelf.activityViewController = nil;
};

[self.containerVc presentViewController:self.activityViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

ShareItems是实现协议的自定义对象UIActivityItemSource.

PS我试过APP谷歌照片,发现它在共享功能方面做得很好.它可以共享9张图像,甚至原始高清尺寸的系统照片断言到微信使用UIActivityViewController.那么,我该如何解决这个问题呢?

wj2*_*061 5

由于App Extension的内存限制,微信的共享扩展已终止.
根据Apple的App Extension编程指南:优化效率和性能

运行应用扩展程序的内存限制明显低于前台应用程序的内存限制.在这两个平台上,系统可能会积极地终止扩展,因为用户希望在主机应用程序中返回其主要目标.某些扩展可能具有比其他扩展更低的内存限制:例如,窗口小部件必须特别有效,因为用户可能同时打开多个窗口小部件.

1.我创建了9个非常小的图像,并与微信成功分享:

- (UIImage *)imageWithColor:(UIColor *)color
{
  CGRect rect = CGRectMake(0, 0, 1, 1);
  UIGraphicsBeginImageContext(rect.size);
  CGContextRef context = UIGraphicsGetCurrentContext();

  CGContextSetFillColorWithColor(context, [color CGColor]);
  CGContextFillRect(context, rect);

  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  return image;
}    
Run Code Online (Sandbox Code Playgroud)

2.在与微信共享之前,您可以缩小图像,这里有一些Scale方法