到目前为止,我能找到的所有示例都是Core Data和NSArrayController之间的直接绑定。这意味着每个NSArrayController都精确地映射一个实体。

有没有一种方法可以自定义填充到NSArrayController中的内容?

例如,我有两个实体:

FileMetaData
    ID
    FileName
    FileSize
    Owner(relationship m..1 to SystemUser)

SystemUser
    ID
    FirstName
    LastName
    Files(relationship 1..m to FileMetaData)


我有一个NSArrayController来填充具有两列的表视图,一列是“ FileName”,另一列是“ UserName”。用户名来自SystemUser实体中的名字+姓氏。 NSArrayController设置为与FileMetaData绑定。

做这个的最好方式是什么?谢谢。

最佳答案

轻松获得UserName属性(FirstName + LastName)的一种方法是使用SystemUser方法在UserName类上定义类别,该方法返回正确连接的FirstNameLastName属性。

然后,在各种绑定中,您可以绑定到UserName属性。直接输入到浏览器中,因此未经测试,UISupport(或任何其他名称)类别SystemUser可能看起来像这样:

// In SystemUser+UISupport.m

- (NSString *)userName
{
    return [NSString stringWithFormat: @"%@ %@", self.FirstName, self.LastName];
}


为了在FirstNameLastName属性更改时使绑定起作用,您可能也想实现此方法:

+(NSSet*)keyPathsForValuesAffectingUserName
{
    return [NSSet setWithObjects: @"self.FirstName", @"self.LastName", nil];
}


最后,为了完整起见,您可以在头文件中声明新的只读属性:

// In SystemUser+UISupport.h

@property (readonly) NSString *userName;

关于objective-c - 定制核心数据如何填充NSArrayController的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11020075/

10-11 22:02