菜鸟教程小白 发表于 2022-12-12 20:33:01

ios - NSURL 连接 sendAsynchronousRequest 如何保存响应?


                                            <p><pre><code>.h
@property (strong) NSString *reply;
</code></pre>

<p>我有以下方法:</p>

<pre><code>.m
@synthesize reply;

- (void)send
{

               queue:[ init]
               completionHandler:
                        ^(NSURLResponse *response, NSData *data, NSError *error)      
                        {
                            if (error)
                            {
                              //NSLog(@&#34;Error,%@&#34;, );
                               initWithString:]];
                            }
                            else
                            {
                              //NSLog(@&#34;%@&#34;, [ initWithData:data encoding:NSASCIIStringEncoding]);
                               initWithData:data encoding:NSASCIIStringEncoding]];
                            }
                        }];

}
</code></pre>

<p>现在,我尝试从 block /处理程序返回一个值,但显然这是不可能的(或者我还没有弄清楚语法)。</p>

<p>我试图设置一个局部变量来获取回复(数据)的值,但它会产生错误。</p>

<p>不产生错误的唯一方法是使用类属性。但是当我尝试读取 的值时,它是 null,这让我觉得它永远不会被设置。</p>

<p>我知道sendAsync函数是线程异步的,所以的值为null的原因,而当我使用sendSynchronousRequest时,我总是得到回复???</p>

<p>我做错了什么,如何从 completionHandler 中返回一个值???</p>

<p>Edit#1:在我看来,我做错了什么。我正在跟踪代码,当我使用同步发送时,一切正常。使用异步的,对 sendAsynchronousRequest 的实际调用从未执行,让我认为线程没有被调用,因此是空值。</p>

<p>Edit#2:我找到了解决这个问题的方法,添加以下内容:</p>

<pre><code>
               queue: init
               completionHandler:
                        ^(NSURLResponse *response, NSData *data, NSError *error)      
                        {
                            if (error)
                            {
                              //NSLog(@&#34;Error,%@&#34;, );
                               initWithString:]];
                            }
                            else
                            {
                              //NSLog(@&#34;%@&#34;, [ initWithData:data encoding:NSASCIIStringEncoding]);
                               initWithData:data encoding:NSASCIIStringEncoding]];
                            }
                        }];

[ runUntilDate: ];
</code></pre>

<p>但是,我不完全确定我了解它的工作原理。我想 RunLoop 告诉异步操作运行 2 秒(我可以验证,因为将日期间隔设置为低值时,由于使用实时服务器进行测试,我得到一个空响应)。我不明白的是,当我只是告诉 RunLoop 运行时,它会永远阻塞一切,就好像当前线程从未终止一样。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>摆脱那个 runUntilDate 并尝试使用 ,看看这是否会改变任何东西。 </p>

<pre><code>
             queue:
             completionHandler:
                  ^(NSURLResponse *response, NSData *data, NSError *error)...   
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSURL 连接 sendAsynchronousRequest 如何保存响应?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10300707/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10300707/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSURL 连接 sendAsynchronousRequest 如何保存响应?