在iPhone iOS8上取消时,UIActivityViewController崩溃

问题描述 投票:1回答:2

我正在使用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上进行了测试。有人有同样的问题吗?有没有发现?

ios objective-c exc-bad-access uiactivityviewcontroller presentviewcontroller
2个回答
0
投票

感谢@ Y.Bonafons

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

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


0
投票

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

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

例如,使用可选绑定来确定可选的returnedItems是否包含值(naïf代码):

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.