搜索大量数据来自iPhone中的Web服务
我必须开发一个应用程序,它应该处理来自web服务调用的大量数据 有一个带搜索栏的UITableView,当用户键入字母时,tableview应动态显示搜索栏中文本对应的搜索结果搜索大量数据来自iPhone中的Web服务,iphone,ios,web-services,core-data,data-management,Iphone,Ios,Web Services,Core Data,Data Management,我必须开发一个应用程序,它应该处理来自web服务调用的大量数据 有一个带搜索栏的UITableView,当用户键入字母时,tableview应动态显示搜索栏中文本对应的搜索结果 处理此类数据传输的最佳方式是什么?在用户每次键入信件时发送请求似乎不是一个好主意 不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。一个好方法是仅使用搜索过滤的数据重新加载表 您有一个带有您的值的NSArray 然后为过滤后的结果创建另一个NSAr
处理此类数据传输的最佳方式是什么?在用户每次键入信件时发送请求似乎不是一个好主意 不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。不要对每个字母进行搜索,而是在用户点击“搜索”按钮时进行搜索。一个好方法是仅使用搜索过滤的数据重新加载表
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的最佳解决方案) 请记住,重要的不是您“希望”如何实现此功能,而是您的最终用户希望此功能如何为他们工作。通常,用户不想等待(等待一个庞大的数据集),他们希望快速、简单和最新的数据访问(延迟加载)