是否可以使用 cocoa 绑定与 NSTableView 和多对多关系
Is it possible to use cocoa bindings with NSTableView and Many-to-Many relationships
我想知道是否可以使用 cocoa 绑定来显示 NSTableView 行上的一对多或多对多关系。
我想做的是每行显示一个实体,在一列中我想通过关系显示来自另一个实体的多个属性。
目前我的架构是这样的:
人物 <--->> 标签
一行应如下所示:
Name | Birth | Address | tag
--------------------------------------------------------
jon 75/12/13 123 street handyman, contractor
paul 53/03/20 53 avenue 1 contractor, swimmer, biologist
这可能吗?
有几种方法可以做到这一点。出于讨论的目的,我假设一个集合 属性 tags
用于一对多关系。
你可以做一个依赖属性这是标签列表字符串:
+ (NSSet*)keyPathsForValuesAffectingTagList
{
return [NSSet setWithObject:@"tags"];
}
- (NSString*) tagList
{
return [[self.tags sortedArrayUsingSelector:@selector(localizedStandardCompare:)] componentsJoinedByString:@", "];
}
(如果 tags
是一个集合而不是数组,您将使用 self.tags.allObjects
。)
由于这在某种程度上特定于标签列表在视图中的呈现方式,因此可以将其视为视图层而不是模型层的更多部分。因此,您可以在 class 的类别中定义这些方法,而不是 class 本身。
另一种方法是使用值转换器来做同样的事情class。您将文本字段绑定到 tags
集合 属性,但指定自定义值转换器的名称 class。 class 将从集合 class(数组或集合)转换并以类似于上述的方式生成字符串。
@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
我想知道是否可以使用 cocoa 绑定来显示 NSTableView 行上的一对多或多对多关系。
我想做的是每行显示一个实体,在一列中我想通过关系显示来自另一个实体的多个属性。
目前我的架构是这样的:
人物 <--->> 标签
一行应如下所示:
Name | Birth | Address | tag
--------------------------------------------------------
jon 75/12/13 123 street handyman, contractor
paul 53/03/20 53 avenue 1 contractor, swimmer, biologist
这可能吗?
有几种方法可以做到这一点。出于讨论的目的,我假设一个集合 属性 tags
用于一对多关系。
你可以做一个依赖属性这是标签列表字符串:
+ (NSSet*)keyPathsForValuesAffectingTagList
{
return [NSSet setWithObject:@"tags"];
}
- (NSString*) tagList
{
return [[self.tags sortedArrayUsingSelector:@selector(localizedStandardCompare:)] componentsJoinedByString:@", "];
}
(如果 tags
是一个集合而不是数组,您将使用 self.tags.allObjects
。)
由于这在某种程度上特定于标签列表在视图中的呈现方式,因此可以将其视为视图层而不是模型层的更多部分。因此,您可以在 class 的类别中定义这些方法,而不是 class 本身。
另一种方法是使用值转换器来做同样的事情class。您将文本字段绑定到 tags
集合 属性,但指定自定义值转换器的名称 class。 class 将从集合 class(数组或集合)转换并以类似于上述的方式生成字符串。
@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