【发布时间】:2015-05-05 08:49:01
【问题描述】:
我在 Crashlytics 中看到的崩溃有时会发生在我的用户身上。在以下代码的最后一行显示 UIActivityViewController 时会发生崩溃:
NSData* snapShot = ... ;
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObjects:activityTextsProvider, snapShot ,nil] applicationActivities:[NSArray arrayWithObjects:customActivityA, customActivityB, customActivityC, nullptr]];
activityViewController.excludedActivityTypes = [NSArray arrayWithObjects:UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeMail, UIActivityTypeCopyToPasteboard, nil];
activityViewController.popoverPresentationController.sourceView = self.myButton;
activityViewController.popoverPresentationController.sourceRect = self.myButton.bounds;
activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError)
{
...
};
[self presentViewController:activityViewController animated:YES completion:nil];
我在主线程中执行此操作,无法在本地重现此崩溃。这次崩溃的原因可能是什么?
编辑:我将 nullptr 更改为 nil,但问题仍然存在。我设法重现了这个问题:只有在打开活动控制器之前我显示了一个 UIMenuController 才会发生崩溃。创建 UIActivityViewController 时它不是 nil,但是当呈现控制器时,我在 presentViewController 行中看到崩溃并且那里的活动控制器显示为 nil
【问题讨论】:
-
第二个数组中的
nullptr是什么?如果您想将 null 插入到数组中,请尝试[NSNull null]。 -
这是一个 c++ nil。没有注意到我在那里使用了 nullptr 但它应该没有任何区别
-
我认为值得一提,因为集合类型不能包含 nil 项(因为它是
[NSNull null])。 -
其实arrayWithObject必须以nil结尾
-
该死,你说得对。我太习惯使用
@[item1, item2]速记了。 :)
标签: objective-c cocoa ios8 uiactivityviewcontroller