2011-09-19 91 views
1

我想過濾數據並將其顯示到一個uitableview,但我有一些問題篩選數據。篩選數據nsarray iphone

我有一個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; 

在我的應用我有一個顯示的NSArray的數據,並且還列舉了「週一,週二......「星期五」一個的TabBar的UITableView的。當用戶按下其中任何一個時,我有以下代碼來篩選特定日期的數據。 (工作正常)。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"day== %@ && CourseTitle==%@", day,courseSelected]; 
rows = [[courseArray filteredArrayUsingPredicate:predicate]retain]; 
[tableview reloadData]; 

的問題是,如何檢查並顯示在同一行不止一次如果DAY2,第3天,第4天,第5天是等於當前「日」用戶選擇?因此,例如,如果我選擇「星期一」,UITableView應顯示相同的記錄兩次(因爲'day'和'day5'包含字符串'Monday')?

回答

1

您無法通過在模型數組上使用單個謂詞來獲得期望的結果。你可能會考慮的是一個包含[Course,Day]對的CourseDay模型對象。

所以上面的模型對象將轉換爲5個獨立CourseDay對象:

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

注意,當然以上陣列中只有一個對象不是一式五份。有了這個數組,你可以應用你的過濾器:"day=%@ && course.CourseTitle==%@"來獲得你想要的結果。

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