我想知道是否可以使用cocoa绑定在NSTableView行上显示一对多或多对多关系。
我想要做的是每行显示一个实体,并且在一列中我想通过关系显示来自另一个实体的多个属性。
目前我的架构是这样的:
人< --->>标签
一行应如下所示:
Name | Birth | Address | tag
--------------------------------------------------------
jon 75/12/13 123 street handyman, contractor
paul 53/03/20 53 avenue 1 contractor, swimmer, biologist
甚至可能吗?
答案 0 :(得分:3)
有几种方法可以做到这一点。出于讨论的目的,我假设一对多关系的集合属性tags
。
您可以创建一个依赖属性,它是标记列表字符串:
+ (NSSet*)keyPathsForValuesAffectingTagList
{
return [NSSet setWithObject:@"tags"];
}
- (NSString*) tagList
{
return [[self.tags sortedArrayUsingSelector:@selector(localizedStandardCompare:)] componentsJoinedByString:@", "];
}
(如果tags
是一个集合而不是数组,则您使用self.tags.allObjects
。)
由于这特定于标记列表在视图中的显示方式,因此可以将其视为视图层的一部分而不是模型层。因此,您可以在类的类别中定义这些方法,而不是类本身。
另一种方法是使用值转换器类执行相同的操作。您将文本字段绑定到tags
集合属性,但指定自定义值转换器类的名称。该类将从集合类(数组或集合)转换,并以与上述类似的方式生成字符串。
@interface TagListTransformer : NSValueTransformer {}
@end
@implementation TagListTransformer
+ (Class) transformedValueClass
{
return [NSString class];
}
+ (BOOL) allowsReverseTransformation
{
return NO;
}
- (id) transformedValue:(id)value
{
return [[value sortedArrayUsingSelector:@selector(localizedStandardCompare:)] componentsJoinedByString:@", "];
}
@end