在iPhone iOS8上取消时,UIActivityViewController崩溃

时间:2015-08-29 15:22:19

标签: ios objective-c exc-bad-access uiactivityviewcontroller presentviewcontroller

我正在使用ViewController

中的这行代码显示activityViewController

[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会出现在屏幕上,可以选择发送短信或电子邮件等动作。选择其中一个操作后,Mail控制器的SMS将在屏幕上显示预填充数据。但取消此控制器后,我的应用程序崩溃了EXC_BAD_ACCESS错误。它随机发生,并且这个控制器有可能在没有崩溃的情况下消失。应用程序仅限iPhone,数组不是零。

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

2 个答案:

答案 0 :(得分:0)

感谢@ Y.Bonafons

在pop'ing之后,我没有在前一个控制器中将我的委托设置为nil,这就是为什么它试图调用它的方法。

启用Zombie Objects对我有很大帮助。

答案 1 :(得分:0)

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

在分配为充当Action扩展将控制权返回给应用程序时要执行的完成处理程序的闭包中,请确保在使用可选操作之前先检查其是否可选。

例如,使用可选绑定来找出可选的returnItems是否包含值(默认代码):

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

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

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