Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索大量数据来自iPhone中的Web服务_Iphone_Ios_Web Services_Core Data_Data Management - Fatal编程技术网

搜索大量数据来自iPhone中的Web服务

搜索大量数据来自iPhone中的Web服务,iphone,ios,web-services,core-data,data-management,Iphone,Ios,Web Services,Core Data,Data Management,我必须开发一个应用程序,它应该处理来自web服务调用的大量数据 有一个带搜索栏的UITableView,当用户键入字母时,tableview应动态显示搜索栏中文本对应的搜索结果 处理此类数据传输的最佳方式是什么?在用户每次键入信件时发送请求似乎不是一个好主意 不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。一个好方法是仅使用搜索过滤的数据重新加载表 您有一个带有您的值的NSArray 然后为过滤后的结果创建另一个NSAr

我必须开发一个应用程序,它应该处理来自web服务调用的大量数据

有一个带搜索栏的UITableView,当用户键入字母时,tableview应动态显示搜索栏中文本对应的搜索结果


处理此类数据传输的最佳方式是什么?在用户每次键入信件时发送请求似乎不是一个好主意

不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。

不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。

一个好方法是仅使用搜索过滤的数据重新加载表

  • 您有一个带有您的值的
    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];
        }
    }
    
    for(int i=0;i<[arrayOfAll计数];i++){
    NSString*sTemp=[arrayOfAll对象索引:i];
    NSRange titleResultsRange=[sTemp rangeOfString:searchText
    选项:NSCaseInsensitiveSearch];
    如果(标题结果范围.length>0){
    [arrayOfResults添加对象:sTemp];
    }
    }
    
  • 现在,使用
    arrayOfResults
    而不是
    arrayOfAll


  • 一个好的方法是仅使用搜索筛选的数据重新加载表

  • 您有一个带有您的值的
    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];
        }
    }
    
    for(int i=0;i<[arrayOfAll计数];i++){
    NSString*sTemp=[arrayOfAll对象索引:i];
    NSRange titleResultsRange=[sTemp rangeOfString:searchText
    选项:NSCaseInsensitiveSearch];
    如果(标题结果范围.length>0){
    [arrayOfResults添加对象:sTemp];
    }
    }
    
  • 现在,使用
    arrayOfResults
    而不是
    arrayOfAll


  • 是的,每次用户键入信件时发送请求是个坏主意。。。但是,例如,如果您使用NSOperationQueues实现它,您可以在点击密钥(任何字符或退格)时取消以前的请求,那么只有一个请求发送到服务器。这只是一个建议,无论如何,请在实施时多加考虑

    很明显,最简单的方法就是如Prashant所说的那样

    @tonio据我所知,您假设NSArray中已经有了所有数据,您只需使用NSRange过滤解析结果。正如Karthik所说,这是来自web服务的大量数据,加载可能需要很多时间,而且是不必要的网络流量。但假设这是您想要的方式,我建议使用NSPredicate筛选结果:

    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF contains[cd] %@",searchText];
    NSArray *filteredResults = [arrayOfAll filteredArrayUsingPredicate: predicate];
    

    现在您可以在TableView中使用filteredResults数组。

    是的,每次用户键入一封信时发送一个请求是个坏主意。。。但是,例如,如果您使用NSOperationQueues实现它,您可以在点击密钥(任何字符或退格)时取消以前的请求,那么只有一个请求发送到服务器。这只是一个建议,无论如何,请在实施时多加考虑

    很明显,最简单的方法就是如Prashant所说的那样

    @tonio据我所知,您假设NSArray中已经有了所有数据,您只需使用NSRange过滤解析结果。正如Karthik所说,这是来自web服务的大量数据,加载可能需要很多时间,而且是不必要的网络流量。但假设这是您想要的方式,我建议使用NSPredicate筛选结果:

    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF contains[cd] %@",searchText];
    NSArray *filteredResults = [arrayOfAll filteredArrayUsingPredicate: predicate];
    

    现在,您可以在TableView中使用filteredResults数组。

    这取决于“巨大”的大小以及用户将如何使用应用程序

    如果加载整个数据集需要几分钟的时间,那么我倾向于获取少量的数据,例如每次搜索字符串更改时

    如果数据不是那么“庞大”,那么如果你不想像Prashant Bhayani建议的那样使用“搜索”按钮,那么就使用tonio.mg的建议(他的可能是移动设备imho的最佳解决方案)


    请记住,重要的不是您“希望”如何实现此功能,而是您的最终用户希望此功能如何为他们工作。通常,用户不想等待(等待一个庞大的数据集),他们希望快速、简单和最新的数据访问(延迟加载)。

    这取决于“庞大”的大小以及用户将如何使用应用程序

    如果加载整个数据集需要几分钟的时间,那么我倾向于获取少量的数据,例如每次搜索字符串更改时

    如果数据不是那么“庞大”,那么如果你不想像Prashant Bhayani建议的那样使用“搜索”按钮,那么就使用tonio.mg的建议(他的可能是移动设备imho的最佳解决方案)

    请记住,重要的不是您“希望”如何实现此功能,而是您的最终用户希望此功能如何为他们工作。通常,用户不想等待(等待一个庞大的数据集),他们希望快速、简单和最新的数据访问(延迟加载)