核心数据 - 具有一对多关系的 sectionNameKeyPath
Core Data - sectionNameKeyPath with a One to Many Relationship
我在使用关系创建 tableView 部分时遇到困难。
我有两个实体具有 List <----->> Item 关系。
我希望 List 成为节,Item 成为行。我用关键路径 @"itemList"
设置了 sectionNameKeyPath
。
这是我的 fetchedResultsController 的其余部分的样子
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
// Fetch Request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Item"];
[fetchRequest setFetchBatchSize:20];
// Sort Descriptors
NSSortDescriptor *itemSort = [[NSSortDescriptor alloc] initWithKey:@"displayOrderItem" ascending:YES];
NSSortDescriptor *sectionSort = [[NSSortDescriptor alloc] initWithKey:@"displayOrderList" ascending:YES];
NSArray *sortDescriptors = @[sectionSort, itemSort];
[fetchRequest setSortDescriptors:sortDescriptors];
// Fetched Results Controller
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"itemList" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return _fetchedResultsController;
}
结果是 fetchedResultsController 根本没有填充 tableView。当我在没有部分的情况下尝试使用 sectionNameKeyPath:nil
和 setSortDescriptor:itemSort
时,它可以很好地填充 tableView。此外,numberOfSectionsInTableView
和 controller didChangeSection
已正确设置。
我不确定我做错了什么。有人可以帮我解决这个问题吗?
谢谢
将部分名称关键路径更改为 itemList.listName
,因为 FRC 需要该部分的字符串名称,而不是该部分的托管对象 'representing'。
我在使用关系创建 tableView 部分时遇到困难。
我有两个实体具有 List <----->> Item 关系。
我希望 List 成为节,Item 成为行。我用关键路径 @"itemList"
设置了 sectionNameKeyPath
。
这是我的 fetchedResultsController 的其余部分的样子
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
// Fetch Request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Item"];
[fetchRequest setFetchBatchSize:20];
// Sort Descriptors
NSSortDescriptor *itemSort = [[NSSortDescriptor alloc] initWithKey:@"displayOrderItem" ascending:YES];
NSSortDescriptor *sectionSort = [[NSSortDescriptor alloc] initWithKey:@"displayOrderList" ascending:YES];
NSArray *sortDescriptors = @[sectionSort, itemSort];
[fetchRequest setSortDescriptors:sortDescriptors];
// Fetched Results Controller
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"itemList" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return _fetchedResultsController;
}
结果是 fetchedResultsController 根本没有填充 tableView。当我在没有部分的情况下尝试使用 sectionNameKeyPath:nil
和 setSortDescriptor:itemSort
时,它可以很好地填充 tableView。此外,numberOfSectionsInTableView
和 controller didChangeSection
已正确设置。
我不确定我做错了什么。有人可以帮我解决这个问题吗?
谢谢
将部分名称关键路径更改为 itemList.listName
,因为 FRC 需要该部分的字符串名称,而不是该部分的托管对象 'representing'。