gpt4 book ai didi

ios - 在 block 外返回一个变量值 - Objective-C, iOS

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:38 26 4
gpt4 key购买 nike

我有下面的代码,它连接到 URL 并获取一些 header 响应,如 http 代码响应和最终 URL(用于重定向情况):


- (NSString *)test
{
__block NSString *cod = @"x";
NSString *urlString = @"<a href="http://www.google.com" rel="noreferrer noopener nofollow">http://www.google.com</a>";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:15.0f];<p></p>

<pre><code>[request setHTTPMethod:@"HEAD"];

[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
NSURL *resolvedURL = [httpResponse URL];
NSString *code = [NSString stringWithFormat:@"%ld", (long)[httpResponse statusCode]];
NSLog(@"%@", resolvedURL);
NSLog(@"%@", code);

cod = @"y"; // the idea was use something like 'cod = code', then return 'code' at end.. But it dont works too.
}];
return cod; }
</code></pre>

<p></p>

如您所见,我已将 cod 变量声明为 __block 类型并设置了 x 值。在 block 内,我设置了 y 值的 cod,但在方法结束时我得到了 cod 的 x 值。我尝试使用类似 cod = code 然后返回 cod 的东西,尊重对象类型,但是我在 block 内分配的任何东西,我都无法在它之外获得值。我做错了什么?

最佳答案

看方法名:

[NSURLConnection sendAsynchronousRequest:...

糟糕!所以它是异步的。在调用完成 block 时,您的 test 方法已经返回。您不能从同步方法返回异步调用的结果,因为它没有意义。调整您的类以与网络操作的异步性质保持一致,使用回调、委托(delegate)等。总而言之,重新设计您的代码。

关于ios - 在 block 外返回一个变量值 - Objective-C, iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15797721/

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