ios-显示消息会导致崩溃吗?

ios-显示消息会导致崩溃吗?,ios,ios5,nsurlconnection,Ios,Ios5,Nsurlconnection,我有以下代码: [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; if ( error != n

我有以下代码:

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
 {         
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

     if ( error != nil )
     {
         // Display a message to the screen.
         UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"There was a server error getting your business plan. We use a remote server to backup your work." 
                    message:@"Please make sure your phone is connected to the Internet. If the problem persists, please let us know about this." 
                delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

         [message show];
但它在NSUrlConnection从服务器返回时执行。它在极少数情况下会造成崩溃。可能吗?这似乎是一段无害的代码


谢谢

NSURLConnection是否在某个奇数线程上返回结果?我不知道,但我怀疑UIAlertView只适用于UI线程,因为它是从UI开始的

 (dispatch_async(dispatch_get_main_queue(), ^{ 
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"There was a server error getting your business plan. We use a remote server to backup your work." 
                message:@"Please make sure your phone is connected to the Internet. If the problem persists, please let us know about this." 
            delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

     [message show];
 });)

抱歉,尚未编译此文件,其中可能有输入错误。

如果输入条件块以显示错误,那不是因为UIAlert,而是因为NSURLConnection遇到错误。我会将错误信息输出到控制台,以便您在遇到这些罕见的情况时可以看到错误是什么,并使用NSURLConnection解决问题。问题在于,您没有在主线程中显示alertView。所有与UI相关的代码都需要在主线程上工作

当我在另一个线程上显示alertView时,我遇到了类似的崩溃

您需要更改以下方法:

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
 {         
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

     if ( error != nil )
     {
         // Display a message to the screen.
        dispatch_async(dispatch_get_main_queue(), ^{

          UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"There was a server error getting your business plan. We use a remote server to backup your work." 
                    message:@"Please make sure your phone is connected to the Internet. If the problem persists, please let us know about this." 
                delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

          [message show];
       });
     }
}
将其更改为:

 [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
 {         
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

     if ( error != nil )
     {
         // Display a message to the screen.
          UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"There was a server error getting your business plan. We use a remote server to backup your work." 
                    message:@"Please make sure your phone is connected to the Internet. If the problem persists, please let us know about this." 
                delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
         [message performSelectorOnMainThread:@selector(show) withObject:nil waitUntillDone:NO];

     }
}

您的邮件内容是从所述的
NSURLConnection
中提取的吗?此代码位于何处?它是否放置在由
nsurlconnectionelegate
指定的委托方法中?如果是这样的话,这就是问题所在。如果您可以发布更多的示例代码,我们将更容易为您提供帮助。@esqew否内容只是纯文本。只是发布了一个更大的代码时钟。代码位于执行NSUrlConnection调用后执行的块中。不建议在那里显示该消息吗?我应该如何正确地向用户显示内容?对不起,这里写得不够小。看下一个答案!Crashalytics提供了有关错误的额外信息:异常类型:SIGSEGVCode:SEGV_ACCERR_uuu36-[BusinessController ViewDidDisplay:]\u block_invoke_0但我如何重构代码以使其更安全且不崩溃?当它出错时,我将输出由NSError类引用中指定的
localizedDescription
localizedFailureReason
返回的字符串,以了解NSURLConnection失败的原因。参考: