核心数据方便获取方法
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】:
你在这里开发的很好。您应该传入上下文,以便在添加另一个上下文时不需要重构。如果需要,您可以将它们滚动到辅助类中,但我倾向于将它们本身放入数据对象类中。它非常清楚正在发生的事情。
【讨论】:
以上是关于核心数据方便获取方法的主要内容,如果未能解决你的问题,请参考以下文章