2013-06-04 37 views
0

我正在构建一个核心数据应用程序,并需要基于它们的日期来获取对象。如果这些对象的日期与全局“selectedDate”同日,则这些对象将显示在UITableView中,用户可以更改并可能会经常这样做。造成这种情况的代码如下:如何使用NSFetchRequest

-(NSDate *)dateByMovingToEndOfDay:(NSDate *)date { 

    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
    NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:date]; 
    [parts setHour:23]; 
    [parts setMinute:59]; 
    [parts setSecond:59]; 
    return [[NSCalendar currentCalendar] dateFromComponents:parts]; 
} 


-(NSDate *)dateByMovingToBeginningOfDay:(NSDate *)date { 

    unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
    NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:date]; 
    [parts setHour:0]; 
    [parts setMinute:0]; 
    [parts setSecond:0]; 
    return [[NSCalendar currentCalendar] dateFromComponents:parts]; 
} 

我的问题是哪种方法会更有效:

执行一个每次提取请求用户更改选择的日期和使用谓词只得到它的对象最新的是在同一天selectedDate

或者

抓取在启动时所有managedObjects,每次用户更改所选的日期时间排序将它们存储在一个数组,然后通过数组,创建一个新的仅包含正确对象的阵列

回答

2

选项1,按需预测提取。它可能会(可能)需要更长的时间来处理,但随着您的应用程序的增长和对象数量的增长,按需提取方法将会扩展得更好,并且不会导致应用程序崩溃(内存不足)。

考虑使用NSFetchedResultsController并设置NSFetchRequestfetchBatchSize

相关问题