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失败的原因。参考: