【问题标题】: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,这就是您访问它的方式。

标签: ios objective-c core-data


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多