2016-04-01 5 views
7

Когда я пользуюсь Apple UIActivityViewController, вы можете поделиться несколькими изображениями с WeChat (weixin). Я считаю, что иногда это не работает. В большинстве случаев он работает хорошо, когда я выбираю только 1 ~ 3 изображения, но если я разделяю 9 изображений (наибольшее количество, разрешенное WeChat), оно, безусловно, потерпит неудачу, и консоль будет печататьUIActivityViewController для обмена изображениями с WeChat не работает

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]; 

ShareItems - это настраиваемый объект, который реализовал протокол UIActivityItemSource.

P.S. Я попробовал приложение APP Google Photo и обнаружил, что он очень хорошо справился со своей функцией совместного использования. Он может обмениваться 9 изображениями с даже оригинальным размером HD системных фотографий для WeChat с использованием UIActivityViewController. Итак, как мне решить эту проблему?

ответ

5

Расширение расширения WeChat завершено из-за ограничения памяти расширения приложения.
Согласно Apple, App Extension Programming Guide: Оптимизация эффективности и производительности

Ограничения памяти для запуска приложения расширения значительно ниже пределов памяти, налагаемых на переднем плане приложение. На обеих платформах система может агрессивно прерывать расширения, потому что пользователи хотят вернуться к своей основной цели в хост-приложении. Некоторые расширения могут иметь более низкие пределы памяти, чем другие: например, виджеты должны быть особенно эффективными, поскольку у пользователей, вероятно, будет открыто несколько виджетов одновременно.

1.Я создал 9 очень маленькие изображения, а также совместно с WeChat успешно:

- (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; 
}  

2.You может уменьшать изображения перед тем делиться ими с WeChat, вот некоторые Scale methods

+1

В OP упоминается приложение Google Фото, в котором можно обмениваться изображениями HD. В чем причина этого? – Suragch

0

У меня такая же проблема. Ответ @ wj2061 правильный, но не решение. Я думаю, вы, вероятно, установили shareItem с UIImage. Если у вас есть файл imageUrl, установите его в shareItem. Если нет, попробуйте сначала сохранить файл UIImage. в вашем классе shareItem, верните файлUrl.

- (nullable id)activityViewController:(UIActivityViewController*)activityViewController itemForActivityType:(NSString *)activityType{ 
    return _filePathUrl; 
} 

Это работа для меня.

+0

Если кто-то отправил неправильное решение, отметьте его. – techydesigner