我正在创建一个带有一些聚合数据的 UITableView。在此过程中,需要使用节标题对表视图单元格进行排序和分组。
问题是我想在 NSFetchRequest 中使用瞬态属性来生成节标题和结果排序。问题是,在设置 NSFetchRequest 时,我收到“NSInvalidArgumentException”,原因是:“传递给 setPropertiesToFetch 的密钥路径player.fullName 无效”。
NSFetchRequest 的主要实体是一个具有以下属性的 Player 实体:firstName 和 lastName。为了对数据进行排序和分组,引入了瞬态属性“fullName”。这是lastName 和firstName 属性的简单串联。
到目前为止尝试过的事情有:
a) 定义 -(NSString*)fullName 方法
b) 定义一个 @property (nonatomic,readonly) NSString *fullName
c) 添加@dynamic fullName
d) 将 fullName 属性添加到 Player 实体并使其成为瞬态。
是否有任何想法或无法在包含 group by 子句的 NSFetchRequest 中选择瞬态属性。
任何帮助表示赞赏。
最后,似乎在 NSFetchResults 和 Group By 的组中包含瞬态属性是不可能的。
jrturton 提出的很棒的建议已经接近。最后,瞬态属性 fullName 很容易在实体更新时生成,并且更新频率非常低,因此解决方案是停止使用瞬态属性并创建一个完全成熟的属性。只需将其视为极端的非规范化即可。
解决方案是设置以下内容
-(void)setLastName:(NSString*)aName
{
[self willChangeValueForKey: @"lastName" ];
[self setPrimitiveValue: aName forKey: @"lastName" ];
[self updateFullName];
[self didChangeValueForKey: @"lastName" ];
}
-(void)setFirstName:(NSString*)aName
{
[self willChangeValueForKey: @"firstName" ];
[self setPrimitiveValue: aName forKey: @"firstName"];
[self updateFullName];
[self didChangeValueForKey: @"firstName" ];
}
这会将 fullName 更新为 Player 实体的属性并消除我的问题。希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)