将项目从NSSet添加到UITableView(将NSSet转换为多个数组?)

时间:2013-06-17 03:43:06

标签: ios objective-c uitableview nsarray nsset

我有一个UITableView,它通过以下方式从Core Data添加信息:

  1. 标题
  2. 添加了各种名称的“类别”
  3. 与类别对应的名称应加载在类别
  4. 下方的单元格中

    现在我有标题加载正确的名称和正在添加的部分和行数。但是 - 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]];
    

3 个答案:

答案 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];