iOS核心数据:获取子类别是必要的吗?

时间:2013-12-28 13:16:54

标签: ios objective-c core-data nsfetchedresultscontroller nsfetchrequest

我正在优化我的应用。我的表结构简化如下:

MainCategory

  • name
  • position
  • hasSubcategories

SubCategory

  • name
  • position
  • belongsToMainCategory

现在,如果用户在第一个视图控制器中选择了一个主要类别,那么他将在下一个类别中显示某个主要类别的所有子类别。到目前为止,使用以下代码:

- (void)setupFetchedResultsController
{
    NSError *error = nil;
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SubCategory"];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES]];
    [self.mainCategory.managedObjectContext executeFetchRequest:request error:&error];
    request.predicate = [NSPredicate predicateWithFormat:@"belongsToMainCategory = %@", self.mainCategory];

    self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
                                                                       managedObjectContext:self.mainCategory.managedObjectContext
                                                                         sectionNameKeyPath:nil
                                                                                  cacheName:nil];
}

现在我开始怀疑我是否需要这样做,因为如果我将我的数据模型设置为主要类别我在mainCategory.hasSubcategories中拥有所有信息。但是这些对象是如何排序的?或者像我现在那样重新获取真的更容易吗?

1 个答案:

答案 0 :(得分:1)

我的简单建议是坚持使用该代码。如果您访问mainCategory.hasSubcategories,则会有NSSet未订购。所以,你需要自己订购。

在我的代码中如果我需要像你那样做,我通常会使用这种模式。它很简单,可以重复使用。另外,如果你担心表演不用担心。引擎盖下的核心数据维护着一个缓存,可以提高检索性能。

如果您想加快速度,您还可以依赖setRelationshipKeyPathsForPrefetching类的NSFetchRequest方法。