gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:29:10 25 4
gpt4 key购买 nike

按下共享按钮后,我的 iOS 游戏崩溃了。然后,此按钮为用户提供了发布/发送预先编写的文本行和应用程序链接到 Twitter、FB、邮件、消息等的选项。我能够在运行 iOS 8.2 的所有 iPad 模拟器上重现崩溃情况。

这是符号化的崩溃报告:https://www.dropbox.com/s/yyo4ouniegt6s0e/dotSports.crash?dl=0

此外:这是在执行导致崩溃的操作时来自 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)

这是崩溃的代码:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"AppController");
[pool release];
return retVal;
}

以下是分享按钮的代码:

-(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);

}
}
}];


}

对于可能导致崩溃的原因或如何补救崩溃有什么想法吗?

谢谢!

最佳答案

您使用 UIAlertController 来显示共享按钮,但不包含 UIPopoverPresentationController。当您的应用在 iPad 上运行时,您必须使用 UIPopoverPresentationControllerApple Docs on 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];
}

关于仅在 iPad 上按共享按钮后 iOS 游戏崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29997369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com