我正在使用一些聚合数据创建UITableView。在此过程中,需要使用Section Headings对表格视图单元格进行排序和分组。
问题是我想在NSFetchRequest中使用Transient属性来生成部分标题&结果排序。问题是,在设置NSFetchRequest时,我收到''NSInvalidArgumentException',原因是:'无效的keypath player.fullName传递给setPropertiesToFetch'。
NSFetchRequest的主要实体是具有属性的Player实体:firstName&姓。为了对数据进行排序和分组,引入了瞬态属性“fullName”。这是lastName和firstName属性的简单连接。
到目前为止所尝试的事情是:
a)定义 - (NSString *)fullName方法
b)定义@property(非原子,只读)NSString * fullName
c)添加@dynamic fullName
d)将fullName属性添加到Player实体&让它变得短暂。
是否有任何想法或现在是否在包含group by子句的NSFetchRequest中选择瞬态属性。
任何帮助表示感谢。
答案 0 :(得分:3)
最后,似乎在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实体的属性并删除了我的问题。希望它有所帮助。
答案 1 :(得分:2)
您不能在获取请求中涉及瞬态属性,但可以将它们用于部分名称键路径,只要它们以相同的顺序出现即可。
尝试在lastName和firstName(数组中的两个单独的排序描述符)上对您的获取请求进行排序,然后在创建获取的结果控制器时使用player.fullName
作为部分名称键路径(只需从列表中选择a和b)以上)。