Фильтрация данных nsarray iphone - PullRequest
1 голос
/ 19 сентября 2011

Я пытаюсь отфильтровать данные и отобразить их в удобном для просмотра виде, но у меня возникают проблемы с фильтрацией данных.

У меня есть 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 равен текущему «дню», в котором находится пользовательвыбирает ?.Так, например, если я выберу «понедельник», UITableView должен отображать одну и ту же запись дважды (потому что «день» и «день5» содержит строку «понедельник»)?

Ответы [ 2 ]

1 голос
/ 18 июля 2012

Для фильтрации данных из массива используйте 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]);
1 голос
/ 19 сентября 2011

Вы не можете получить желаемый результат, используя один предикат в массиве модели. То, что вы могли бы рассмотреть, это объект модели CourseDay, состоящий из пары [Course, Day].

Таким образом, вышеуказанный объект модели будет преобразован в 5 отдельных объектов CourseDay:

[[Course, Monday], [Course, Tuesday], [Course Wednesday], [Course, Thursday], [Course, Friday]]

Обратите внимание, что курс в приведенном выше массиве - это только один объект, а не пять копий. С помощью этого массива вы можете применить ваш фильтр: "day=%@ && course.CourseTitle==%@", чтобы получить желаемый результат.

...