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

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中。但是这些对象如何分类?还是像我目前所做的那样,真的真的更容易吗?

最佳答案

我的简单建议是保留该代码。如果您访问mainCategory.hasSubcategories,则将得到一个未订购的NSSet。因此,您需要自己订购。

在我的代码中,如果我需要像你一样做,我通常会使用这种模式。这很简单,可以重复使用。此外,如果您担心表演,不必担心。后台的核心数据维护着一个高速缓存,可让您提高检索性能。

如果要加快处理速度,还可以依赖setRelationshipKeyPathsForPrefetching类的NSFetchRequest方法。

关于ios - iOS核心数据:是否需要提取子类别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20815000/

10-14 16:59
查看更多