我正在创建一些聚合数据的UITableView。在此过程中,需要在对表 View 单元格进行排序和分组时使用节标题。

问题是我想在NSFetchRequest中使用Transient属性来生成节标题和结果排序。问题是,在设置NSFetchRequest时,我收到“NSInvalidArgumentException”,原因:“无效的 key 路径player.fullName传递给setPropertiesToFetch”。

NSFetchRequest的主要实体是具有以下属性的Player实体:firstName和lastName。为了对数据进行分类和分组,引入了一个临时属性“fullName”。这是lastName和firstName属性的简单串联。

到目前为止尝试过的事情是:

a)定义-(NSString *)fullName方法

b)定义一个@property(非原子的,只读的)NSString * fullName

c)添加一个@dynamic fullName

d)将fullName属性添加到Player实体并使其 transient 。

是否有任何想法或没有办法在包含group by子句的NSFetchRequest中选择 transient 属性。

任何帮助表示赞赏。

最佳答案

最终,似乎不可能在NSFetchResults的group中包含Group By的 transient 属性。

jrturton的好建议得到了认可。最后, transient 属性fullName很容易在实体更新时生成,并且仅很少更新,因此解决方案是停止使用 transient 属性并创建完全成熟的属性。只需将其视为极端非正规化即可。

解决方案是设置以下内容

-(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实体的属性,并消除了我的问题。希望能帮助到你。

10-07 19:54
查看更多