两个 NSMutables 数组中的 UISearch 栏

Posted

技术标签:

【中文标题】两个 NSMutables 数组中的 UISearch 栏【英文标题】:UISearch bar in two NSMutables arrays 【发布时间】:2014-02-28 20:43:02 【问题描述】:

我看到项目 UISearchBar search two arrays 和很多项目并没有找到解决方案,问题类似,有两个 NSMutablesArrays "subdetail" 和 "sublista" 它在 Cell cell.textLabel 中显示>cell.detailTextLabel。 我尝试使用 UISearchbar,但我使用 NSPredicate 托盘而不运行,尝试使用 NSRange 并出现更多错误,我很绝望。请帮助我,任何 cmets 都同意。

这是我在搜索中的代码:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope

    NSMutableDictionary *playas = [NSMutableDictionary dictionaryWithObjectsAndKeys:sublista, @"nombre", subdetail, @"localidad", nil];
    [alldata addObject:playas];
    for(NSDictionary *playas in alldata)
        NSString *nombre = [playas objectForKey:@"nombre"];
        NSRange nombreRange = [[nombre lowercaseString] rangeOfString:[searchText lowercaseString]];
        if(nombreRange.location != NSNotFound)
            [filteredList addObject:playas];
    

添加其余代码 .m 和 .h

https://dl.dropboxusercontent.com/u/6217319/BuscarViewController.h https://dl.dropboxusercontent.com/u/6217319/BuscarViewController.m

提前致谢。 最好的问候

【问题讨论】:

【参考方案1】:

您的代码存在很多问题。我不知道哪些问题实际上破坏了它,但这些问题中的任何一个都可能导致严重的问题。

首先,您提供的代码示例没有为您引用的许多 hte 对象提供声明。这不可能按照给定的方式编译。如果这些是视图控制器实例的属性,您需要使用访问器方法——self.alldata 或 [self alldata],无论您喜欢哪个。

其次,您似乎只是在添加这些属性。如果您从不重置它们的内容,则每次调用此方法时,您都会增加数据集的大小——查看您的代码,可能是递归的。

第三,您尝试将两个数据集合并在一起,然后尝试仅搜索其中一个。要么不合并,要么分别搜索两者然后合并结果。事实上,你正在做的事情是行不通的。

第四,您的表格视图实际上应该只显示一种类型的数据,因此您不应该需要合并。

编辑:

根据您提供的代码示例,您的整个 VC 将需要重组。鉴于您的代码中有多少看起来是用西班牙语编写的,我正在对您实际在做什么进行一些猜测。

首先,假设您使用的是现代版本的 xcode,请去掉 .m 文件中的 @synthesize(不再需要它)。这将导致您使用实际 ivar 而不是适当的 getter 的每个地方都变成错误,因此您可以快速修复它们。 iVars 默认使用其属性名称的前缀下划线,因此您仍然可以在必要时访问它们——但只能通过显式访问 ivar 而不是属性。

其次,您应该重新调整处理数据的方式。我不知道你从哪里得到你的数据,但看起来各种对象是相当一致的。您应该继续创建一个新类来保存所有数据,或者将它们全部放入一个字典中。此时,'alldata' 属性实际上应该是一个包含所有有效数据的数组。然后你应该做的是有一个过滤的数据列表(filteredData 是个好名字),然后你把任何符合搜索条件的数据放在那里。只要记住在项目移入和移出过滤列表时重新加载表或适当地更新它。

【讨论】:

谢谢,并同意,编辑和添加 .h 和 .m 附加在下面供您查看。 dl.dropboxusercontent.com/u/6217319/BuscarViewController.mdl.dropboxusercontent.com/u/6217319/BuscarViewController.h 同意这个,但是如果你看到代码,你能检查从sqlite数据库中提取的数据吗,这会构建两个NSMutableArrays..sublista和sub detail,分别包含名称和详细信息。在代码中,所有数据(NSMUtableArray)都在这个构造 NSDictionary 上,有两个键 nombre 和 localidad。这是我做谓词的问题?或过滤?你能在代码中看到filterContentForSearchText下的filteredlist数组吗?

以上是关于两个 NSMutables 数组中的 UISearch 栏的主要内容,如果未能解决你的问题,请参考以下文章

UIView 中的 UISearchBar

predicateWithFormat 很慢

检查python中的两个数组,它们在一个数组中有两个相同的值

比较 ClickHouse 行中的两个数组

fortran程序如何将两个数组中的元素,放入一个数组?

基于其中一个数组中的 Null 值共同过滤 Pyspark 结构中的两个数组