2012-03-13 52 views
1

我自动生成的数据包芯类NSManagedObject,和我所试图做的是为某个人显示所有电话号码。我试图在我的表视图类中显示这个来填充表。核心数据的NSSet问题

人到号码是一个一对多的关系,而数字是在一套我也由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;  
} 

回答

1

尝试使用您fetchRequest谓词。

,如果你想为所有的人显示所有的电话号码或你想怎么说格式化,但是这是如何让所有的数字一个人我不是从你的问题肯定。

为了让所有的电话号码一个特定的人在一个表中的观点:像你想它

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

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

然后排序这个人的电话号码。

+0

这不起作用,你能解释一下person.name =%@“,personName吗?personName不可用,我怎么会得到这个? – Vikings 2012-03-14 02:19:56

+0

因此,对于上面的代码,我假设你知道Person NSManagedObject的名称,你想从中得到数字,所以...假设你已经在前一个表格视图中点击了一个人,以便打开一个新的表格视图与他们的电话号码,你选择的人将具有名称属性。将其作为personName或其他名称传递到下一个表视图。使用该名称代替personName。 – theSpectre142 2012-03-14 16:21:23

+0

Number NSManagedObject应该有一个引用返回给Person NSManaged对象,因此应该拥有一个person属性,以便这是来自哪里的人,然后.name是Person对象上的属性。 – theSpectre142 2012-03-14 16:23:37

0

有很多的方式,你可能会“一个人显示所有的电话号码” - 特别是想想你希望您的表格包含以及应该如何组织,并且您可能会更轻松地找到所需的答案。

在此期间,这里有一种方法:使用表部分代表在每个为他们的关联中的人,和行。您可以这样做:

  1. 将Number设置为您的获取请求的实体。
  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]; 
    } 
    
+0

我正在寻找只显示基于一个人的电话号码。所以桌子上将会充满电话号码,但是只有同一人的所有号码 – Vikings 2012-03-13 23:58:57