我正在使用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上进行了测试。有人有同样的问题吗?有没有发现?
答案 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
}
...
这只是一种尝试,但是可以肯定的是,您可以写点更好的东西。