我正在尝试过滤数据并将其显示到uitableview中,但我在过滤数据时遇到了一些问题。
我有一个NSArray 'courses'
,其中包含以下数据:
Code = "";
Comment = "None ";
Core = Core;
CourseTitle = "Games";
Module = test;
TutorEmail = "";
TutorName = "";
day = Monday;
day2 = Tuesday;
day3 = Wednesday;
day4 = Thursday;
day5 = Monday;
id = 2;
在我的应用程序中,我有一个UITableview显示nsarray数据,还有一个标签为“星期一,星期二......星期五”的标签栏。当用户按下任何一个时,我有以下代码来过滤该特定日的数据。 (工作正常)。
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"day== %@ && CourseTitle==%@", day,courseSelected];
rows = [[courseArray filteredArrayUsingPredicate:predicate]retain];
[tableview reloadData];
问题是,如果第2天,第3天,第4天,第5天等于用户选择的当前“日”,我如何检查并多次显示同一行?例如,如果我选择'Monday',UITableView应该显示两次相同的记录(因为'day'和'day5'包含字符串'Monday')?
答案 0 :(得分:1)
通过在模型数组上使用单个谓词,无法获得所需的结果。你可能会考虑的是一个由[Course,Day]对组成的CourseDay模型对象。
因此,上面的模型对象将转换为5个单独的CourseDay对象:
[[Course, Monday], [Course, Tuesday], [Course Wednesday], [Course, Thursday], [Course, Friday]]
请注意,上面数组中的课程只有一个对象而不是五个副本。使用此数组,您可以应用过滤器:"day=%@ && course.CourseTitle==%@"
以获得所需的结果。
答案 1 :(得分:1)
对于从数组中过滤数据,请使用像这样的NSPredicate
NSMutableArray *tempArray=[[NSMutableArray alloc]init];
[tempArray addObject:@"one"];
[tempArray addObject:@"two"];
[tempArray addObject:@"three"];
[tempArray addObject:@"four"];
[tempArray addObject:@"five"];
[tempArray addObject:@"one"];
//filter data in self array object
NSString *match = @"one";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", match];
NSArray *results = [tempArray filteredArrayUsingPredicate:predicate];
NSLog(@"search is %@",[results description]);