核心数据NSSet问题

时间:2012-03-13 22:11:29

标签: iphone objective-c ios core-data

我自动生成了核心数据NSManagedObject类,我想要做的是显示某个人的所有电话号码。我试图在我的表视图类中显示它来填充表。

Person to Numbers是一对多关系,数字在我通过addNumbersObject方法执行的集合中。我只是不明白如何在fetchresultscontroller中获取它并在表视图中显示它们。

目前我只是抓住所有人。

有任何想法或建议吗?

核心数据类:

@class Number

@interface Person : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSSet *numbers;

@end

@interface Person (CoreDataGeneratedAccessors)

- (void)addNumbersObject:(Number *)value;
- (void)removeNumbersObject:(Number *)value;
- (void)addNumbers:(NSSet *)values;
- (void)removeNumbers:(NSSet *)values;

@end

表视图类:

- (NSFetchedResultsController *)fetchedResultsController 
{    
    if (_fetchedResultsController != nil)
        return _fetchedResultsController;

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:_context];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:@"Root"];

    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    [fetchRequest release];
    [theFetchedResultsController release];

    return _fetchedResultsController;      
}

2 个答案:

答案 0 :(得分:1)

尝试在fetchRequest上使用谓词。

我不确定您的问题是否要显示所有人的所有电话号码或您希望如何格式化,但这是如何获取一个人的所有号码。

在一个表视图中获取一个特定人员的所有电话号码:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Number" inManagedObjectContext:_context];

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"person.name == %@", personName]]; //Assuming person.name is unique

然后按照您的意愿对该人的电话号码进行排序。

答案 1 :(得分:0)

有很多方法可以“显示一个人的所有电话号码” - 特别考虑您希望您的表格包含哪些内容以及如何组织它们,您可能更容易找到答案正在寻找。

与此同时,这里有一种方法:使用表格部分来表示人物,并使用每个行中的行作为相关的数字。你可以这样做:

  1. 将号码设为您的获取请求的实体。
  2. 将“person.name”设置为排序键。 (您可能希望添加第二个排序描述符,以便每个人的数字都是合理的顺序。)
  3. 同时将“person.name”设置为部分名称键路径。
  4. 实现您的表格视图数据源-tableView:titleForHeaderInSection:

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo name];
    }