过滤数据nsarray iphone

时间:2011-09-19 12:23:50

标签: objective-c ios4 nsarray nspredicate

我正在尝试过滤数据并将其显示到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')?

2 个答案:

答案 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]);