具有一对多关系的NSFetchedResultsController

时间:2011-04-28 15:13:00

标签: iphone objective-c core-data

这是我无法理解使用Core Data的原因。我想使用NSFetchedResultsControllerDelegate,我到目前为止看到的常用代码很容易理解,但总是基于一个实体模型。所以你想在你的表中显示所有“事件”,你在Event实体上做一个获取请求,然后你就可以了。

问题是,我的模型是:

City (one-to-one) Company (one-to-many) Employees

我的桌子需要向员工展示,但是获取必须以城市为基础,以便检索公司,然后是员工,对吧?我完全迷失了,我只是不知道怎么做这个。

因为如果我获取City或Company并且我将Employees放在NSMutableSet中,那么我不会松开所有authomatic UITableViewController同步吗?例如,如果我这样做,我将无法做像

这样的事情
- (NSInteger)tableView:(UITableView *)tableView 
    numberOfRowsInSection:(NSInteger)section {
    id <NSFetchedResultsSectionInfo> sectionInfo = 
        [[_fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

3 个答案:

答案 0 :(得分:4)

迟到总比没有好。

使用谓词

predicate = [NSPredicate predicateWithFormat:@"(ProvinceToCounty == %@)", selectedObject];

从此链接http://blog.sallarp.com/iphone-core-data-uitableview-drill-down/

开始

如果您打算创建一个泛型类并使其适用于不同的父子实体,请确保删除NSFetchedResultsController的缓存名称。

答案 1 :(得分:2)

您的数据模型应具有互惠关系,以便在获取任何特定对象时,您可以立即访问所有相关对象。

在您的情况下,具有互惠关系的数据模型看起来像:

City{
    company<-->Company.city
}

Company{
    city<-->City.company
    employees<-->>Employee.company
}

Employee{
    company<<-->Company.employees
}

因此,如果您有Employee个对象,则会找到公司self.companyself.company.city城市(大多数情况下,实际的self是不必要的,我将其用于说明目的。)如果您有Company个对象,则可以找到self.employees中的员工和self.city中的城市。如果您有City个对象,则会找到self.company.employees的所有员工。

关系是实际创建核心数据核心的对象图。您可以使用提取在图形中查找一组对象,然后从这些对象“向外”关系以查找所有相关数据。正是相互关系使得双向关系能够来回走动。

答案 2 :(得分:0)

我认为您应该使用“城市”属性或“公司名称”属性或两者的过滤器来获取“公司”管理对象。如果您在公司和员工之间设置了一对多关系,那么您的公司托管对象应该具有一个NSSet属性,该属性包含列表所需的所有员工对象。