搜索海量数据来自 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的主要内容,如果未能解决你的问题,请参考以下文章

为 iPhone 应用程序实现搜索建议

缓存来自 iPhone 的 PHP Web 服务的结果

实力打脸, iPhone SE2 确认发布!

新消息!iPhone SE2 年中发布

使用数据库中的数据进行 Ajax 实时搜索

SAP CRM 在Web UI中创建搜索帮助