ios - 如何使用 NSFetchRequest

标签 ios database date core-data nspredicate

我正在构建一个核心数据应用程序,需要根据日期获取对象。如果这些对象的日期与用户可以更改并且可能会经常更改的全局“selectedDate”在同一天,则这些对象将显示在 UITableView 中。代码如下:

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

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

每次用户更改所选日期时执行获取请求,并使用谓词仅获取日期与所选日期在同一天的对象

或者

在启动时获取所有托管对象,将它们存储在一个数组中,然后在每次用户更改所选日期时对数组进行排序,创建一个仅包含正确对象的新数组

最佳答案

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

考虑使用 NSFetchedResultsController 并设置 NSFetchRequestfetchBatchSize

关于ios - 如何使用 NSFetchRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16913175/

相关文章:

ios - 如何在 swift 注册时根据该 PhoneNumber 检索 uid

ios - 使用嵌入式 HTTP 代理缓存流视频?

php - MySQL 查询优化?

asp.net - 在第二个文本框中获取下周

java - 如何修复日期转换时的 'JsonSyntaxException'

c# - 从 X 天开始获取日期时间值?

iOS AVFoundation 如何转换每秒的相机帧数以使用 CMTime 创建游戏中时光倒流?

ios - 为什么来自 customTableViewCell 的 UiTextField 不在我的带有 UITableView 的 UiViewController 中返回字符串

android - ListView 的这个自定义 CursorAdapter 是否为 Android 正确编码?

mongodb - 在 Mongodb 中,如何不受限制地获取返回的总结果数?