我的 iOS 应用程序的一个 View 是 UISearchDisplay。我将其设计为预先输入的搜索,这样每当用户输入一个新字符时,表格就会重新填充。我通过实现 UISearchDisplayDelegate 协议(protocol)方法做到了这一点:
searchDisplayController:shouldReloadTableForSearchString:
在这种方法中,我将提供的字符串附加到我的查询 URL 中。然后我创建一个新的 NSURLConnection 并提交一个新的异步请求。我通过委托(delegate)方法接收和附加数据:
connection:didReceiveData:
连接完成下载数据后,通过以下方法:
connectionDidFinishLoading
我将数据传递给 NSXMLParser 的一个实例。接收到的数据是我的数据库中与给定字符串匹配的所有联系人的 XML 文件。数据解析完成后,我重新加载表。
我的问题:如果用户输入文本的速度足够快,就会有多个连接和解析任务同时进行。这是一个问题,因为我有一个 NSMutableData 实例,我将数据附加到并解析。希望你能看到我的目标。
有没有人对改进我的实现和/或解决这个关键部分问题有任何建议?
最佳答案
NSXMLParser
不是异步的。这让很多人感到困惑,因为他们认为这是由于它使用了委托(delegate)回调方法。然而,实际上 parse
在所有解析完成之前,方法不会返回。
因此,虽然您可能同时有多个连接,但除非您自己对其进行多线程处理,否则不会发生多个解析操作。
要解决多连接问题,不如每个连接只有一个 NSMutableData,而不是一个?有很多方法可以做到这一点:您可能想查看以下问题的答案以获得想法。
关于ios - 在 iOS 中使用异步网络调用创建一个预先输入的 UISearchDisplay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11469627/