Ios 不使用搜索栏筛选表数据

Ios 不使用搜索栏筛选表数据,ios,objective-c,Ios,Objective C,我有一张桌子,旁边有商品名称和日期。然后我有另一个表,我需要添加所有对象,这些对象上有特定的日期,并从表中添加到这个表中。例如,我希望从此表中获取日期为03/08/13的所有对象,并将它们添加到另一个数组中。这可能吗?我能想到的唯一方法就是使用与搜索栏过滤方法类似的方法。任何帮助都将不胜感激。 上表有两个单独的NSMutableArray用于标签,因此我认为需要两个过滤器数组 拥有两个独立的阵列是最好的解决方案。如果您使用的是核心数据,只需在NSFetchedResultsController上

我有一张桌子,旁边有商品名称和日期。然后我有另一个表,我需要添加所有对象,这些对象上有特定的日期,并从表中添加到这个表中。例如,我希望从此表中获取日期为03/08/13的所有对象,并将它们添加到另一个数组中。这可能吗?我能想到的唯一方法就是使用与搜索栏过滤方法类似的方法。任何帮助都将不胜感激。 上表有两个单独的NSMutableArray用于标签,因此我认为需要两个过滤器数组


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

您不需要使用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]];
//创建当前日历
NSCalendar*日历=[NSCalendar currentCalendar];
//安装日期组件开始日期
NSDateComponents*dateComponents=[日历组件:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)fromDate:[NSDate日期]];
//设置日期组件
[dateComponents setHour:0];
[dateComponents setMinute:0];
[dateComponents setSecond:0];
NSDate*startOfDate=[calendar dateFromComponents:dateComponents];
[dateComponents setHour:23];
[日期/分钟:59];
[第二秒:59];;
NSDate*endOfDate=[calendar dateFromComponents:dateComponents];
//创建谓词以筛选日期
NSPredicate*谓词=[NSPredicate谓词格式:@“(cellDate>%@)和(cellDate<%@)”,起始日期,结束日期];
NSArray*filteredArray=[[NSArray alloc]initWithArray:[tableData filteredArray使用谓词:谓词]];

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

我可以问一下,您打算如何处理创建的新数组吗?顺便说一句,关于如何存储数据,您可能不需要两个数组(每个标签1个)。1实践是创建一个
NSDictionary
对象,并将数据分配给对应于单元格不同元素的键。这样,您只有一个对象可与任何给定单元关联。如果你感兴趣,请告诉我,我可以在适当的答案中详细说明。这基本上是一个任务应用程序,所以我想在主视图控制器上创建一个数组,以显示当天到期的所有任务?我没有考虑过为标签使用NSDictionary,这会有助于过滤吗?在我看来,是的,这会使它变得更简单,因为您只需要过滤1个数组而不是2个数组。我将提交一个包含详细信息的答案。这非常有效,谢谢:)填充表格的NSDictionary方法更有效