在 iPhone iOS8 取消时 UIActivityViewController 崩溃

UIActivityViewController crashes when cancelling on iPhone iOS8

我正在使用我的 ViewController

中的这行代码显示活动ViewController

[MyClass showShareMenuWithString:@"test string" sender:self];

这是 MyClass 中此方法的声明

+ (void)showShareMenuWithString:(NSString*)text sender:(id)sender{
    NSArray* array = [NSArray arrayWithObject:[NSString stringWithFormat:@"%@",text]];
    UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:array applicationActivities:nil];

    [sender presentViewController:activityView animated:YES completion:nil];

}

在此之后,activityView 会出现在屏幕上,能够select 发送短信或电子邮件等一些操作。选择其中一项操作后,邮件控制器的 SMS 将显示在屏幕上,其中包含预填充的数据。但是在取消这个控制器之后,我的应用程序崩溃并出现 EXC_BAD_ACCESS 错误。它是随机发生的,而且这个控制器很可能会在没有崩溃的情况下消失。应用程序仅 iPhone 并且数组不是 nil。

应用程序未在 iOS7 崩溃。它在 iPhones 上用不同的 iOS 7/8 进行了测试。有人有同样的问题吗?有什么发现吗?

感谢@Y.Bonafons

弹出后我没有在前一个控制器中将我的委托设置为 nil,这就是它试图调用它的方法的原因。

启用僵尸对象对我帮助很大。

另一个可能与 UIActivityViewController 崩溃有关的问题可能是在展开 Optional 值时意外发现 nil。

在分配给应用程序扩展returns控件时作为完成处理程序执行的闭包中,一定要在使用它之前检查可选的。

例如,使用可选绑定来查找可选的 returnedItems 是否包含值(纯代码):

activityViewController.completionWithItemsHandler =
            { (activityType, completed, returnedItems, error) in

    if let a = returnedItems {
                    ...
                } else {
                    return
                }
...

这只是一种尝试,但你肯定可以写出更好的东西。