現在、Xcode 6 (ベータ 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.
私はiOS 7とiOS 8の両方でiPhoneとiPadに次のコードを使用しています
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に何か変更がありましたか?確認しましたが、これについては何も見つかりませんでした。
ベストアンサー1
iPadでは、アクティビティビューコントローラは新しいUIPopoverプレゼンテーションコントローラ、次の 3 つのプロパティのいずれかを使用して、ポップオーバーの表示のアンカー ポイントを指定する必要があります。
アンカー ポイントを指定するには、UIActivityController の UIPopoverPresentationController への参照を取得し、次のいずれかのプロパティを設定する必要があります。
if ( [activityViewController respondsToSelector:@selector(popoverPresentationController)] ) {
// iOS8
activityViewController.popoverPresentationController.sourceView =
parentView;
}