我有一个UITableView,它通过以下方式从Core Data添加信息:
现在我有标题加载正确的名称和正在添加的部分和行数。但是 - Core Data的结果将作为NSSet返回,因此我无法根据indexPath.row将每个名称添加到单元格中。
有什么建议吗?供参考:
cell.textLabel.text = [NSString stringWithFormat:@"%@",[[[dataToUse objectAtIndex:indexPath.section]valueForKey:@"heldBy"]valueForKey:@"name"]];
为相应部分的每个单元格返回适当的名称集,但它会将ENTIRE集返回给每个单元格。我只想根据它所属的行添加每个名称。我可以通过将NSSet转换为数组来解决这个问题,但由于创建了多个集合(因为有多个类别),我不知道如何做到这一点。
编辑:我通过以下方式修复了我的问题,但我仍然有兴趣知道最好的事情是什么。NSSet *daset = [[dataToUse objectAtIndex:indexPath.section]valueForKey:@"heldBy"];
NSMutableArray *addToLabel = [[NSMutableArray alloc]init];
int i = 0;
for(NSSet *contact in daset) {
[addToLabel insertObject:[contact valueForKey:@"name"] atIndex:i];
NSLog(@"%@",addToLabel);
i++;
}
cell.textLabel.text = [NSString stringWithFormat:@"%@",[addToLabel objectAtIndex:indexPath.row]];
答案 0 :(得分:1)
使用NSFetchedResultsController
它旨在完全满足您的需求。对于像你这样的直接案例,您只需要根据模型关系将数据组织成各个部分,它会通过自动管理提取,编辑,缓存等来减轻您的负担。您可以找到a nice tutorial here当然还有official documentation here。
答案 1 :(得分:0)
要从NSSet-> NSArray转换,您需要使用NSSortDescriptior对该集进行排序。类似的东西:
NSSortDescriptor *sort=[[NSSortDescriptor alloc] initWithKey:@"nm" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSArray *arr = [[myset allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
答案 2 :(得分:0)
NSSortDescriptor * sort = [[NSSortDescriptor alloc] initWithKey:@" name"升序:YES选择器:@selector(localizedCaseInsensitiveCompare:)];
NSArray * arr = [[myset allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
" nsset object" * nssetObject = [arr objectAtIndex:indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%@",nssetObject.name];