在没有搜索栏的情况下过滤表格数据

时间:2013-08-04 19:09:16

标签: ios objective-c

我有一个表格,其中包含项目名称和日期。然后我有另一个表,我需要添加所有具有特定日期的对象,从表中添加到此表中。例如,我想从该表中获取日期为03/08/13的所有对象,并将它们添加到另一个数组中。这是否可能我能想到的唯一方法是使用与搜索栏过滤方法类似的方法。任何帮助将不胜感激。 上面的表有两个单独的NSMutableArrays用于标签,所以我需要有两个过滤器数组。

enter image description here

2 个答案:

答案 0 :(得分:0)

拥有两个独立的阵列是最佳解决方案。如果您使用的是核心数据,则可以在NSFetchedResultsController上设置过滤谓词;否则,您只需将未过滤数组中的对象添加到过滤后的数组中即可。让我知道您使用哪种方法,如果您对这两种方法有任何疑问。

答案 1 :(得分:0)

您不需要使用2个数组:每个标签使用1个数组。相反,您可以使用NSDictionary对象并将数据分配给与单元格的不同元素对应的键。之后,要进行日期过滤,您可以执行以下操作:

// Create current calendar
NSCalendar *calendar = [NSCalendar currentCalendar];

// Setup date components from date
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];

// Set date components
[dateComponents setHour:0];
[dateComponents setMinute:0];
[dateComponents setSecond:0];
NSDate *startOfDate = [calendar dateFromComponents:dateComponents];
[dateComponents setHour:23];
[dateComponents setMinute:59];
[dateComponents setSecond:59];
NSDate *endOfDate = [calendar dateFromComponents:dateComponents];

// Create predicate to filter your date
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(cellDate > %@) AND (cellDate < %@)",startOfDate, endOfDate];

NSArray *filteredArray = [[NSArray alloc] initWithArray:[tableData filteredArrayUsingPredicate:predicate]];

您应该确保在每个NSDate对象中将单元格日期存储为NSDictionary。此外,您需要使用上述所有设置的原因是因为如果您只使用@"cellDate == @filterDate"谓词,由于时间因素它将无法工作(除非您碰巧知道和/或明确指定了确切的保存日期的时间。)