2012-11-29 34 views
3

我设法构建了一个如下所示的核心数据数据库: 我有一个或多个名为'User'的实体,具有诸如firstName,lastName,avatarImage,birthday等属性...如何在UITableView中显示核心数据实体

此“用户”的另一个属性是与实体“多帐户”的一对多关系。 为了显示这个内容,我设置了一个UITableView,它分为两部分,第一部分用于所有常规信息(firstName,lastName),第二部分用于NSSet帐户(每个帐户一个单元,只是它们的概述)。

到目前为止,一切都很好:)

我现在的问题是:我怎样才能检索第一部分基本信息,而无需手动将其添加到字典或阵列,例如,有一个“计数“属性,这对于构建表视图至关重要。此外,对于某些实体的属性,它必须是合法的。 此表视图只需要显示这个单一的实体,它传递给类的属性(self.userEntity ...)

希望你明白我的意思,并有一些想法:)

THX提前

达里奥

回答

0

所以,你有一个数组或一组“帐户,你有‘用户’,这有一个一对多的关系‘帐户’,你想高效地获取到一组”用户有任何提名的账户?

的键 - 值编码的解决办法是这样的:

NSSet *setOfAccounts = ...whatever...; 

// assuming the to-one relationship from 'account' to 'user' is named 'user' 
NSSet *setOfUsers = [setOfAccounts valueForKey:@"user"]; 

你也可以使用一个核心数据的查询,如果它是更容易为你提供的某个地方,虽然我无法想出一个解决方案,不涉及一个子查询:

// assuming the to-many relationship from 'user' to 'account' is named 'accounts' 
[NSPredicate predicateWithFormat: 
       @"SUBQUERY(accounts, $x, %@ contains $x)[email protected] > 0", accounts] 

那会很可能与键 - 值编码方法要慢。如果性能问题,我建议您使用KVC方法获得一组用户,然后在self in ...上执行取回请求,以便在所有相关用户中发生故障。

于子问题是NSPredicatecontains但没有对“包含在”,所以你不能直接甩掉它周围是这样的:

"any accounts isContainedIn %@", accounts 

,否则将有可能向下编译到更高效的SQL。如果你的原始谓词是可适应的,那么将它作为任何操作来配制它肯定会更有效率,例如,如果它是:

/* accounts where ... */ 
"accountDate > %@", someDateInThePast 

然后为用户提供最快的查询将是:

"any accounts.accountDate > %@", someDateInThePast 

可悲的是,我不认为“任何”有一次,所以如果应用到多个领域条件的任何适当的语法您对账户的查询不是微不足道的,那么如果键值编码不可接受的话,您需要回到SUBQUERY方法。

0

如果您有兴趣添加表格视图单元格,并编辑/删除它们。你绝对应该看看这个tutorial我使用过这个教程两次,它让我快速掌握核心数据!他是个好老师!它是一个4部分系列,他教你如何在不同视图上加载实体等!