通过Binding和Value Transformer在视图中显示多对多关系(NSTableColumn)

时间:2011-11-22 11:37:51

标签: cocoa core-data cocoa-bindings nsvaluetransformer

我有一个实体标签(在核心数据中),它有一些属性和一对多关系,名为"别名"。

我的ArrayController是" bind"在Xcode中:

Parameters->Managed Object Context = File's Owner.managedObjectContext

它适用于所有属性,其他列显示正确的值。

在一栏中,我尝试"显示"这种多对多的关系。如果我天真地这样做并将我的NSTableColumn的值绑定到我的ArrayController.arrangedObjects.aliases(就像所有其他属性一样),我会在屏幕上看到它:

  

()的关系错误,   name aliases,isOptional 1,isTransient 0,entity Tag,   renamingIdentifier别名,验证谓词(),警告(),   versionHashModifier(null),目标实体TagAlias,   inverseRelationship标记,minCount 0,0x10053db10上的maxCount 0

似乎是这种关系的某种CoreData代理......

然后我构建了NSValueTransformer的子类:

@interface tagAliasesToStringTransformer : NSValueTransformer

+ (Class)transformedValueClass;
+ (BOOL)allowsReverseTransformation;
- (id)transformedValue:(id)value;

@end

并尝试将其用作绑定中的Value Transformer。但是我的实施失败了:

@implementation tagAliasesToStringTransformer

+ (Class)transformedValueClass {
    return [NSString class];
}

+ (BOOL)allowsReverseTransformation {
    return NO;
}

- (id)transformedValue:(id)value {

    if (value == nil) return nil;

    ...
}

@end

在transformValue:方法中,value是类' _NSFaultingMutableSet'并且我不知道如何获得别名的Set / Array或任何有用的东西。

目标是构建每个别名的串联的NSString。类似的东西:

  

aTag:alias1 alias2 alias3 ...

1 个答案:

答案 0 :(得分:3)

我找到了解决方案:

_NSFaultingMutableSet实际上是一种NSSet,所以通过这样做:

- (id)transformedValue:(id)value {
    if (value == nil) return nil;

    NSArray *tags = [value allObjects];
    for (Tag *tag in tags) {
        ...
    }
}

您可以访问所有实体。

不知道为什么现在显而易见,而不是一周前......走出新手区?