核心数据 - 在Group By中使用瞬态属性

时间:2012-02-20 10:14:52

标签: ios core-data group-by

我正在使用一些聚合数据创建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中选择瞬态属性。

任何帮助表示感谢。

2 个答案:

答案 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)以上)。