1. ホーム
  2. アイオス

[解決済み】iOS 8のiPadでUIActivityViewControllerがクラッシュする件

2022-03-30 19:46:58

質問

現在、Xcode 6 (Beta 6)でアプリをテストしています。UIActivityViewControllerはiPhoneデバイスとシミュレータでは正常に動作しますが、iPadシミュレータとデバイス(iOS 8)ではクラッシュし、以下のログが出力されます。

Terminating app due to uncaught exception 'NSGenericException', 
reason: 'UIPopoverPresentationController 
(<_UIAlertControllerActionSheetRegularPresentationController: 0x7fc7a874bd90>) 
should have a non-nil sourceView or barButtonItem set before the presentation occurs.

私は、iPhoneとiPadで、iOS 7とiOS 8の両方で、以下のコードを使用しています。

NSData *myData = [NSData dataWithContentsOfFile:_filename];
NSArray *activityItems = [NSArray arrayWithObjects:myData, nil];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:nil applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypeCopyToPasteboard];
[self presentViewController:activityViewController animated:YES completion:nil];

私の他のアプリでも同じようなクラッシュが発生しています。iOS 8でUIActivityViewControllerに何か変更があったのでしょうか?私はチェックしましたが、これについては何も見つかりませんでした。

どうすればいいですか?

iPadでは、アクティビティビューコントローラは、ポップオーバーとして表示され、新しい UIPopoverPresentationController そのため、以下の3つのプロパティのいずれかを使用して、ポップオーバーのプレゼンテーションのためのアンカーポイントを指定する必要があります。

アンカーポイントを指定するには、UIActivityController の UIPopoverPresentationController への参照を取得し、以下のようにプロパティのいずれかを設定する必要があります。

if ( [activityViewController respondsToSelector:@selector(popoverPresentationController)] ) { 
// iOS8
 activityViewController.popoverPresentationController.sourceView =
parentView;
 }