在 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
}
...
这只是一种尝试,但你肯定可以写出更好的东西。
我正在使用我的 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
}
...
这只是一种尝试,但你肯定可以写出更好的东西。