仅在iPad上按下共享按钮后iOS游戏崩溃

仅在iPad上按下共享按钮后iOS游戏崩溃,ios,ipad,crash,crash-dumps,Ios,Ipad,Crash,Crash Dumps,按下共享按钮后,我的iOS游戏崩溃。然后,通过该按钮,用户可以选择向Twitter、FB、邮件、消息等发布/发送一条预写的文本行和应用程序链接。我可以在所有运行iOS 8.2的iPad模拟器上复制崩溃 以下是符号化的碰撞报告: 另外:这是在执行导致崩溃的操作时从Xcode中的输出框中获取的 *** Terminating app due to uncaught exception 'NSGenericException', reason: 'UIPopoverPresentationContro

按下共享按钮后,我的iOS游戏崩溃。然后,通过该按钮,用户可以选择向Twitter、FB、邮件、消息等发布/发送一条预写的文本行和应用程序链接。我可以在所有运行iOS 8.2的iPad模拟器上复制崩溃

以下是符号化的碰撞报告:

另外:这是在执行导致崩溃的操作时从Xcode中的输出框中获取的

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'UIPopoverPresentationController (<_UIAlertControllerActionSheetRegularPresentationController: 0x7a863100>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.'
*** First throw call stack:
(
    0   CoreFoundation                      0x04980466 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x03caea97 objc_exception_throw + 44
    2   UIKit                               0x02564517 -[UIPopoverPresentationController presentationTransitionWillBegin] + 3086
    3   UIKit                               0x01e63f48 __71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke + 1666
    4   UIKit                               0x01e624eb __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 186
    5   UIKit                               0x01e9642b __40+[UIViewController _scheduleTransition:]_block_invoke + 18
    6   UIKit                               0x01d5b946 ___afterCACommitHandler_block_invoke + 15
    7   UIKit                               0x01d5b8f1 _applyBlockToCFArrayCopiedToStack + 415
    8   UIKit                               0x01d5b706 _afterCACommitHandler + 545
    9   CoreFoundation                      0x048a318e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    10  CoreFoundation                      0x048a30d0 __CFRunLoopDoObservers + 400
    11  CoreFoundation                      0x04898b0a __CFRunLoopRun + 1226
    12  CoreFoundation                      0x0489837b CFRunLoopRunSpecific + 443
    13  CoreFoundation                      0x048981ab CFRunLoopRunInMode + 123
    14  GraphicsServices                    0x0524d2c1 GSEventRunModal + 192
    15  GraphicsServices                    0x0524d0fe GSEventRun + 104
    16  UIKit                               0x01d319b6 UIApplicationMain + 1526
    17  Gem Dots copy                       0x00213896 main + 134
    18  libdyld.dylib                       0x04365ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)  
有没有想过是什么原因导致了这次事故,或者如何补救这次事故


谢谢大家!

您正在使用
UIAlertController
显示共享按钮,而不包括
UIPopoverPresentationController
。当应用程序在iPad上运行时,必须使用
UIPopoverPresentationController

例如:

-(IBAction)myButton:(id)sender {
    UIAlertController *shareController=   [UIAlertController
                                alertControllerWithTitle:nil
                                message:nil
                                preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction *shareServiceButton = [UIAlertAction
                                   actionWithTitle:@"Share Service"
                                   style:UIAlertActionStyleDefault
                                   handler:^(UIAlertAction *action)
                                   {
                                       // Share something
                                   }];
    [shareController addAction:shareServiceButton];

    // User on iPad
    UIPopoverPresentationController *popoverController;
    popoverController = shareController.popoverPresentationController;
    popoverController.sourceView = self.view;
    popoverController.sourceRect = self.myButton.frame;
    popoverController.permittedArrowDirections = UIPopoverArrowDirectionAny;

    [self presentViewController:shareController animated:YES completion:nil];
}

请更新您的问题,使其包含碰撞报告和任何相关代码。您是否已使用ActivityViewController感谢您的回答。我是新的编码和购买此源代码。我已经更新了我原来的帖子,更新了当按下共享按钮时执行的代码。你能给我多一点指导吗?
-(void) displayShare:(NSString*)strText imageIdx:(int)nIdx URL:(NSString*)strURL
{
    UIActivityViewController *activityView;

    if(nIdx >= 0)
    {
        NSString* str = [NSString stringWithFormat:@"new-arc-%d-ipad.png", nIdx+1];
        UIImage* image = [UIImage imageNamed:str];
        activityView = [[UIActivityViewController alloc] initWithActivityItems:@[strText, image, [NSURL URLWithString:strURL]] applicationActivities:nil];
    }
    else
        activityView = [[UIActivityViewController alloc] initWithActivityItems:@[strText, [NSURL URLWithString:strURL]] applicationActivities:nil];

    activityView.excludedActivityTypes = @[UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypePrint];

   // [viewController presentViewController:activityView animated:YES completion:nil];
    [window.rootViewController presentViewController:activityView animated:YES completion:nil];

    [activityView setCompletionHandler:^(NSString *activityType, BOOL completed) {
        NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);

        if(completed)
        {
            if([activityType isEqualToString: @"com.apple.UIKit.activity.PostToFacebook"] )
            {
                g_bArchiveMark[19] = true;
                AppSettings::setArchieveInfo(19);
            }
            else if([activityType isEqualToString: @"com.apple.UIKit.activity.PostToTwitter"] )
            {
                g_bArchiveMark[20] = true;
                AppSettings::setArchieveInfo(20);

            }
        }
    }];


}
-(IBAction)myButton:(id)sender {
    UIAlertController *shareController=   [UIAlertController
                                alertControllerWithTitle:nil
                                message:nil
                                preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction *shareServiceButton = [UIAlertAction
                                   actionWithTitle:@"Share Service"
                                   style:UIAlertActionStyleDefault
                                   handler:^(UIAlertAction *action)
                                   {
                                       // Share something
                                   }];
    [shareController addAction:shareServiceButton];

    // User on iPad
    UIPopoverPresentationController *popoverController;
    popoverController = shareController.popoverPresentationController;
    popoverController.sourceView = self.view;
    popoverController.sourceRect = self.myButton.frame;
    popoverController.permittedArrowDirections = UIPopoverArrowDirectionAny;

    [self presentViewController:shareController animated:YES completion:nil];
}