菜鸟教程小白 发表于 2022-12-12 10:16:47

ios - 取消 NSJSONSerialization - 键入时搜索,请求重叠


                                            <p><p>与 iPhone Facebook 应用程序搜索功能类似,我在您将功能输入到我的应用程序时实现搜索,尽管在将数据解码为 JSON 格式时遇到问题。 </p>

<p>基本上发生的情况是因为某些搜索比其他搜索花费的时间更长,它们以不同的时间间隔返回,这会在数据显示在屏幕上时导致一些小的视觉问题。 </p>

<p>我在每次解码后使用 NSJSONSerialization 为关键字“industry”设置了一个 NSLOG</p>

<pre><code>2013-04-09 23:38:18.941 Project Name http://fooWebAddress/json/?method=search&amp;limit=10&amp;q=indus
2013-04-09 23:38:19.776 Project Name http://fooWebAddress/json/?method=search&amp;limit=10&amp;q=indu
2013-04-09 23:38:20.352 Project Name http://fooWebAddress/json/?method=search&amp;limit=10&amp;q=indust
2013-04-09 23:38:21.814 Project Name http://fooWebAddress/json/?method=search&amp;limit=10&amp;q=industr
2013-04-09 23:38:23.434 Project Name http://fooWebAddress/json/?method=search&amp;limit=10&amp;q=ind
2013-04-09 23:38:24.070 Project Name http://fooWebAddress/json/?method=search&amp;limit=10&amp;q=industry
</code></pre>

<p>如您所见,一切都乱了套。 </p>

<p>有没有人有办法停止前一个连接的 NSJSONSerialization。
或者可能有任何其他方式来解决这个问题? </p>

<hr/>

<p>升级到 NSJSONSerialization...</p>

<ol>
<li>NSURLRequest (initwithURL)</li>
<li>NSOperationQueue</li>
<li>NSURLConnection(异步)</li>
<li>NSJSON序列化</li>
</ol>

<p>提前致谢。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>当用户开始输入更多文本时,您<em>可以</em>取消之前的连接并忽略您从他们那里收到的任何进一步的委托(delegate)回调。然后对当前文本发出新请求。</p>

<p>您可以通过维护某种 <code>lastRequest</code> 或 <code>lastOperation</code> 引用来做到这一点。当用户开始输入时,调用 <code></code> 并忽略来自该请求的任何进一步通知,并使用类似 <code>if (request != self.lastRequest) { return; }</code> 在你有的任何回调中。</p>

<p>但是,如果用户继续输入一段时间,您会不断取消请求,并且在他们停止输入之前他们可能看不到任何结果。</p>

<p>更好的解决方案是添加排序,以便每个请求与递增的序列 ID 相关联。然后,您仅在响应序列高于您收到的最后一个时解析结果并更新 UI。如果您收到之前的任何带外响应,您只需忽略它们。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 取消 NSJSONSerialization - 键入时搜索,请求重叠,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15903938/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15903938/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 取消 NSJSONSerialization - 键入时搜索,请求重叠