我正在优化我的应用。我的表结构简化如下:
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
中拥有所有信息。但是这些对象是如何排序的?或者像我现在那样重新获取真的更容易吗?
答案 0 :(得分:1)
我的简单建议是坚持使用该代码。如果您访问mainCategory.hasSubcategories
,则会有NSSet
未订购。所以,你需要自己订购。
在我的代码中如果我需要像你那样做,我通常会使用这种模式。它很简单,可以重复使用。另外,如果你担心表演不用担心。引擎盖下的核心数据维护着一个缓存,可以提高检索性能。
如果您想加快速度,您还可以依赖setRelationshipKeyPathsForPrefetching
类的NSFetchRequest
方法。