搜索海量数据来自 iPhone 中的 Web Services
Posted
技术标签:
【中文标题】搜索海量数据来自 iPhone 中的 Web Services【英文标题】:Search huge data comes from Web Services in iPhone 【发布时间】:2012-02-01 12:38:58 【问题描述】:我必须开发一个应用程序来处理来自网络服务调用的大量数据。
有一个带有搜索栏的 UITableView,当用户输入一个字母时,tableview 应该动态显示搜索栏文本对应的搜索结果。
处理这种数据传输的最佳方式是什么?每次用户键入字母时发送请求似乎是个坏主意。
【问题讨论】:
【参考方案1】:一个好的方法是仅使用搜索过滤的数据重新加载表。
NSArray
包含您的价值观
然后为过滤后的结果创建另一个 NSArray
然后你像这样遍历第一个数组:
for (int i = 0; i < [arrayOfAll count]; i++)
NSString *sTemp = [arrayOfAll objectAtIndex:i];
NSRange titleResultsRange = [sTemp rangeOfString:searchText
options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[arrayOfResults addObject:sTemp];
现在您使用 arrayOfResults
而不是 arrayOfAll
重新加载表
【讨论】:
【参考方案2】:是的,每次用户键入字母时发送请求是个坏主意...但是,例如,如果您使用 NSOperationQueues 实现它,则可以在点击键(任何字符或退格键)时取消先前的请求,然后您将只有一个请求发送到服务器。这只是一个建议,无论如何请在实施时多加考虑。
显然,最简单的方法是 Prashant 所说的。
@tonio 据我了解,您假设您已经拥有 NSArray 中的所有数据,并且您只需使用 NSRange 过滤解析结果。正如 Karthik 所说,这是来自 Web 服务的大量数据,可能需要很长时间才能加载,并且是不必要的网络流量。但是可以说这是您想要的方式,我建议使用 NSPredicate 过滤结果:
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF contains[cd] %@",searchText];
NSArray *filteredResults = [arrayOfAll filteredArrayUsingPredicate: predicate];
现在您在 TableView 中使用过滤结果数组。
【讨论】:
【参考方案3】:这在某种程度上取决于“巨大”有多大以及用户将如何使用该应用。
如果加载整个数据集需要几分钟,那么我会倾向于获得较少量的数据块,例如每次搜索字符串更改时。
如果数据不是那么“庞大”,那么如果您不想像 Prashant Bhayani 建议的那样使用“搜索”按钮(他可能是移动设备的最佳解决方案,恕我直言),请使用 tonio.mg 的建议。
请记住,重要的不是您“希望”如何实现此功能,而是您的最终用户希望此功能如何为他们工作。通常,用户不想等待(等待庞大的数据集),他们确实希望快速轻松地访问最新的数据(延迟加载)。
【讨论】:
【参考方案4】:不要搜索每个字母,而是在用户点击“搜索”按钮时搜索。
【讨论】:
以上是关于搜索海量数据来自 iPhone 中的 Web Services的主要内容,如果未能解决你的问题,请参考以下文章