2013-08-04 73 views
0

我有一个表格,其中包含项目名称和日期。然后我有另一个表,我需要添加所有的对象与他们加入到这从表中的某个日期。例如,我想从该表中取出日期为03/08/13的所有对象,并将它们添加到另一个数组中。这是甚至可能的唯一的方法,我能想到的是有一个类似的方法来搜索栏过滤方法。任何帮助将不胜感激。 上面的表格有两个单独的标签NSMutableArrays,所以我需要有两个滤镜阵列,我认为。无搜索栏过滤表格数据

enter image description here

+0

请问您打算如何使用创建的新阵列进行操作?关于你如何存储你的数据,你可能不需要两个数组(每个标签为1)。 1的做法是创建一个“NSDictionary”对象并将数据分配给与您的单元格的不同元素对应的键。这样,您只有一个对象可以关联到任何给定的单元格。让我知道你是否感兴趣,我可以在适当的答案中详细说明。 – Yazid

+0

它基本上是一个任务应用程序,所以我想在主视图控制器上创建一个数组以显示当天所有的任务?我没有考虑使用NSDictionary的标签将有助于过滤? –

+0

在我看来,它会让它变得更简单,因为你只需要过滤1个数组而不是2个。我将提交一个包含细节的答案。 – Yazid

回答

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

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

+0

完美谢谢:)填充表的NSDictionary方法更加有效 –

0

具有两个单独的阵列是最好的解决办法。如果你使用核心数据,你可以简单地设置一个筛选谓词NSFetchedResultsController;否则,您可以简单地将未过滤的数组中的对象添加到已过滤的数组中。让我知道你会使用哪种方法,以及是否有任何问题。