我正在尝试根据我的属性上的第一个字母(类似于iOS地址簿应用程序)将我的核心数据模型的值显示到A-Z索引表。我的核心数据模型的“收藏夹”实体有2个属性:用户名和状态。我想只显示带有status = accepted
的用户名到A-Z索引表。
这是我的代码:
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favorites" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSString *status = @"accepted";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@",status];
[fetchRequest setPredicate:predicate];
// Create the sort descriptors array.
NSSortDescriptor *usernameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"username" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:usernameDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"username" cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
return fetchedResultsController;
}
现在,当我尝试访问部分名称时,我得到(null)
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSLog(@"%@",[[[fetchedResultsController sections] objectAtIndex:section] name]);
return [[[fetchedResultsController sections] objectAtIndex:section] name];
}
另外,我用这种方式获取名称而不是第一个字符,以便将其显示为节标题。
答案 0 :(得分:1)
您需要正确访问sectionsInfo对象:
id <NSFetchedResultsSectionInfo> info =
[fetchedResultsController sections][section];
return [info name];
但是,这将为您提供每个唯一名称的标题,可能不是您想要的。相反,您必须为您的实体提供瞬态属性,例如NSString *sectionIdentifier
并为其编写一个getter,返回username属性的第一个字母。
如果希望A-Z的索引在表视图的右边缘向下运行,则还需要实现:
sectionIndexTitlesForTableView:
和
tableView:sectionForSectionIndexTitle:atIndex:
。
如果你的标题仍然有null
,那么它们可能未在您的实体中设置或保留?也许你的结果为零?也许你的fetchedResultsController是nil
?您的数据模型中存在许多缺陷,因此这似乎很有可能。
Favorites
是复数形式。这不符合逻辑,您应该将其命名为Favorite
,因为一个实例仅描述了一个收藏夹。Favorite
的属性。这似乎也非常混乱,因为大概你也有一个User
实体,它有一个username
属性。您应该使用关系对此进行建模。答案 1 :(得分:0)
使用NSFetchedResultsController's
sectionIndexTitles
函数获取第一个char的数组