【问题标题】:UIAlertController crashes app when presented from NSURLSessionDataTask?从 NSURLSessionDataTask 呈现时,UIAlertController 会导致应用程序崩溃?
【发布时间】:2020-06-29 22:32:36
【问题描述】:

为什么这不起作用?

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:theRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
    NSString *receivedDataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    NSString *keyInfo = [[[[NSBundle mainBundle] infoDictionary] objectForKey:keyString] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    NSLog(@"%@", receivedDataString);
    NSLog(@"%@", keyInfo);

    if (![receivedDataString isEqual:keyInfo] && ![receivedDataString isEqual: @""])
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];

        UIAlertController *alertCheckForUpdate;

        UIAlertAction *noUpdateBtn = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {}];
        UIAlertAction *yesCydiaUpdateBtn = [UIAlertAction actionWithTitle:@"Cydia" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"cydia://sources"] options:@{} completionHandler:nil];
        }];
        UIAlertAction *yesSileoUpdateBtn = [UIAlertAction actionWithTitle:@"Sileo" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"sileo://package/com.dave1482.powerapp"] options:@{} completionHandler:nil];
        }];

        if ([fileManager fileExistsAtPath:sileoPath] && ![fileManager fileExistsAtPath:cydiaPath]){
            alertCheckForUpdate = [UIAlertController alertControllerWithTitle:@"New Update Available" message:[NSString stringWithFormat:@"Open Sileo to update PowerApp to v%@?", receivedDataString] preferredStyle:UIAlertControllerStyleAlert];
            [alertCheckForUpdate addAction:yesSileoUpdateBtn];
        } else if (![fileManager fileExistsAtPath:sileoPath] && [fileManager fileExistsAtPath:cydiaPath]) {
            alertCheckForUpdate = [UIAlertController alertControllerWithTitle:@"New Update Available" message:[NSString stringWithFormat:@"Open Cydia to update PowerApp to v%@?", receivedDataString] preferredStyle:UIAlertControllerStyleAlert];
            [alertCheckForUpdate addAction:yesCydiaUpdateBtn];
        } else if ([fileManager fileExistsAtPath:sileoPath] && [fileManager fileExistsAtPath:cydiaPath]) {
            alertCheckForUpdate = [UIAlertController alertControllerWithTitle:@"New Update Available" message:[NSString stringWithFormat:@"Open Cydia/Sileo to update PowerApp to v%@?", receivedDataString] preferredStyle:UIAlertControllerStyleAlert];
            [alertCheckForUpdate addAction:yesCydiaUpdateBtn];
            [alertCheckForUpdate addAction:yesSileoUpdateBtn];
        } else {
            alertCheckForUpdate = [UIAlertController alertControllerWithTitle:@"New Update Available" message:[NSString stringWithFormat:@"PowerApp v%@ is available but for some reason you don't have Sileo or Cydia.", receivedDataString] preferredStyle:UIAlertControllerStyleAlert];
        }
        [alertCheckForUpdate addAction:noUpdateBtn];
        [self presentViewController:alertCheckForUpdate animated:YES completion:nil];
    }
}];
[dataTask resume];

以下行使我的应用程序崩溃,似乎试图在块内显示我的 UIAlertController 导致了这种情况。我在针对 iOS 8+ 时使用最新的 Xcode 和 SDK。谢谢!

[self presentViewController:alertCheckForUpdate animated:YES completion:nil];

【问题讨论】:

标签: ios objective-c iphone jailbreak cydia


【解决方案1】:

您在崩溃时收到的错误消息是什么?我的猜测是您正在尝试从后台线程显示警报,在这种情况下,您需要像这样显示它:

dispatch_async(dispatch_get_main_queue(), ^{
    [self presentViewController:alertCheckForUpdate animated:YES completion:nil];
});

【讨论】:

  • 谢谢!你是对的,它是在后台运行的!这完美地解决了它。如果你愿意,我可以感谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多