我正在Objective-C应用程序中实现App Center SDK,并且我需要实现崩溃报告发送的确认。 微软在其指南中提供的解决方案通常可以使用(https://docs.microsoft.com/en-us/appcenter/sdk/crashes/ios),但是在我的应用程序中,在application:didFinishLaunchingWithOptions:方法执行完之后,将显示主视图(在启动过程中,显示加载屏幕),并关闭带有确认的警报
我尝试将performSelectorOnMainThread:withObject:waitUntilDone与waitUntilDone上的YES一起使用-它不起作用。
如果我尝试以另一种方法(不在application:didFinishLaunchingWithOptions:中)实现此警报,则不会出现警报。
使用“ while”循环(等待答案)阻止UI会导致崩溃。
这是Microsoft的默认解决方案,它不能按我的意愿工作。
[MSCrashes setUserConfirmationHandler:(^(NSArray<MSErrorReport *> *errorReports) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"crash" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* sendAction = [UIAlertAction actionWithTitle:@"Send"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSCrashes notifyWithUserConfirmation:MSUserConfirmationSend];
}];
[alertController addAction:sendAction];
alertController.preferredAction = sendAction;
[alertController addAction:[UIAlertAction actionWithTitle:@"Always send"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSCrashes notifyWithUserConfirmation:MSUserConfirmationAlways];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Don't send"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSCrashes notifyWithUserConfirmation:MSUserConfirmationDontSend];
}]];
[self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
return YES;
})]
我希望用户在发送报告之前或不发送报告之前能够思考所需的时间,但是在应用程序启动完成并显示新的(应用程序主视图)后,警报会消失。
没有人遇到这个问题吗? 您是如何解决的?
答案 0 :(得分:0)
已解决。
我希望这会对某人有所帮助。
[MSCrashes setUserConfirmationHandler:(^(NSArray<MSErrorReport *> *errorReports) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"crash"
message:@"message"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* sendAction = [UIAlertAction actionWithTitle:@"Send"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSCrashes notifyWithUserConfirmation:MSUserConfirmationSend];
[self.window makeKeyAndVisible];
}];
[alertController addAction:sendAction];
alertController.preferredAction = sendAction;
[alertController addAction:[UIAlertAction actionWithTitle:@"Always send"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSCrashes notifyWithUserConfirmation:MSUserConfirmationAlways];
[self.window makeKeyAndVisible];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Don't send"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[MSCrashes notifyWithUserConfirmation:MSUserConfirmationDontSend];
[self.window makeKeyAndVisible];
}]];
self.alertWindowForCrashReport = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.alertWindowForCrashReport.rootViewController = [[UIViewController alloc] init];
[self.alertWindowForCrashReport makeKeyAndVisible];
[self.alertWindowForCrashReport.rootViewController presentViewController:alertController animated:YES completion:nil];
return YES; // Return YES if the SDK should await user confirmation, otherwise NO.
})];
现在我要在新窗口中创建警报,将[self.alertWindowForCrashReport makeKeyAndVisible]发送到此新窗口以发出警报,然后在每个操作处理程序中将[self.window makeKeyAndVisible]发送到主窗口。