gpt4 book ai didi

ios - Objective-C GET 请求 - 如何不卡住 UI 并等待响应?

转载 作者:行者123 更新时间:2023-11-28 21:54:12 25 4
gpt4 key购买 nike

我正在使用以下代码发出一个简单的 GET 请求:

NSString *urlStr = [@"http://192.168.1.107/Server.Mobile/test.ashx?rp="
stringByAppendingString:[rpText
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:100];

[request setHTTPMethod: @"GET"];

NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
NSString *txt = [[NSString alloc] initWithData:response1 encoding:NSUTF8StringEncoding];

但是,在执行它时,我试图显示一个 UIAlertView,然后在请求完成时将其关闭。

我知道如何显示/隐藏警报,但我无法设法将其与请求同步。该请求卡住了 UI,因此当它完成时,AlertView 会立即显示和隐藏:

alert = [[UIAlertView alloc] initWithTitle:@"Please, wait..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
[alert show];

// ... Perform get request...

[alert dismissWithClickedButtonIndex:0 animated:YES];

另一方面,如果我将请求分配给一个异步操作,比如 dispatch_async,我就不能调用 dismiss。它只是不关闭 AlertView

alert = [[UIAlertView alloc] initWithTitle:@"Please, wait..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
[alert show];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// ... Perform get request...

[alert dismissWithClickedButtonIndex:0 animated:YES];
});

如何显示警报,执行请求等待响应,然后关闭警报?

我是 iOS 开发新手...

最佳答案

NSURLConnection 可以异步方式运行。使用 initWithRequest:delegate: 初始化程序创建一个 NSURLConnection,将您自己作为委托(delegate)传递。请求完成后,您将收到一个 connectionDidFinishLoading: 回调,您可以从中更新您的 UI。

或者更好的是,使用新的 NSURLSession实现相同目的的 API。

关于ios - Objective-C GET 请求 - 如何不卡住 UI 并等待响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27177488/

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