核心数据方便获取方法

Posted

技术标签:

【中文标题】核心数据方便获取方法【英文标题】:Core Data Convenience Fetch Methods 【发布时间】:2014-06-10 17:03:10 【问题描述】:

我已管理使用获取请求访问的对象。 每次我想要对象时一次又一次地编写 fetch 请求很乏味,所以我为自己做了一个包含 fetch 请求的便捷方法。

我的对象是 WeekDay,为了检索所有 WeekDay 对象,我在 WeekDay 类中创建了以下方法:

+ (NSArray *)allWeekDaysWithManagedObjectContext:(NSManagedObjectContext *)managedObjectContext

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"WeekDay"];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"day" ascending:YES];
    fetchRequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    return [managedObjectContext executeFetchRequest:fetchRequest error:nil];

此代码有效,但我确实觉得有问题。 每次都将 managedObjectContext 作为参数移动,尽管我只有一个 managedObjectContext 只是烦人。我读到 Apple 建议 View Controller 像这样传递 managedObjectContext ,但是这个建议仍然适用于非 ViewController 类吗?

这些方法有命名约定吗?每次使用这种方法,我真的真的闻到这段代码很乏味。

【问题讨论】:

如何使用一个帮助类(它有一个作为@property 的moc)为您完成所有CoreData 的工作:保存、获取等。所以您可以在传入的地方编写一个非常通用的fetchrequest实体名称、属性、排序等。 @Koen 首先感谢您的帮助 :) 您的建议实际上是一个不错的主意。如果我采用上面的方法并对其进行概括,它将对其他类很有用,但我认为我仍然必须将 managedObjectContext 作为参数传递,不是吗? (因为这个方法是类方法)再次感谢您的帮助:) 不,您不必这样做。 helper 类有一个@property 用于上下文,您可以使用result = [self.context executeFetchRequest: request error: &error] 此外,您不需要为此使用类方法,并确保您测试错误(不要通过nil)。 @Koen 如何在不使用类方法的情况下创建此方法?我的意思是,我不知道对象是什么,我没有检索到它,那么这个方法怎么可能是一个实例方法呢? 您需要创建一个全新的 NSObject 子类,称为 CoreDataHelper 或类似的东西,并将其设为 AppDelegate 的@property,这就是您访问它的方式。 【参考方案1】:

你在这里开发的很好。您应该传入上下文,以便在添加另一个上下文时不需要重构。如果需要,您可以将它们滚动到辅助类中,但我倾向于将它们本身放入数据对象类中。它非常清楚正在发生的事情。

【讨论】:

以上是关于核心数据方便获取方法的主要内容,如果未能解决你的问题,请参考以下文章

从不同核心数据实体获取数据并将结果转换为相应类的通用方法

在核心数据中获取两个属性的正确方法

从核心数据中获取数据

核心数据 - 原始设置器/获取器更快吗?啥时候不使用?

Jquery Datatable在asp.net核心中使用异步任务方法获取数据

获取核心数据对象属性最大值的简单可靠方法?