1

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

我的 ArrayController 在 Xcode 中“绑定”到:

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

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

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

()、名称别名、isOptional 1、isTransient 0、实体标记、renamingIdentifier 别名、验证谓词 ()、警告 ()、versionHashModifier (null)、目标实体 TagAlias、inverseRelationship 标记、minCount 0、maxCount 0 on 0x10053db10 的关系错误

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

然后我构建了一个 NSValueTransformer 的子类:

@interface tagAliasesToStringTransformer : NSValueTransformer

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

@end

并尝试将其用作绑定中的值转换器。但我在我的实现中迷失了:

@implementation tagAliasesToStringTransformer

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

+ (BOOL)allowsReverseTransformation {
    return NO;
}

- (id)transformedValue:(id)value {

    if (value == nil) return nil;

    ...
}

@end

在方法transformedValue: 中,值属于“_NSFaultingMutableSet”类,我不知道如何获取别名的集合/数组或任何有用的东西。

目标是构建每个别名连接的 NSString。就像是:

aTag : 别名 1 别名 2 别名 3 ...

4

1 回答 1

3

我找到了解决方案:

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

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

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

您可以访问所有实体。

不知道为什么现在很明显,而不是一周前...离开新手区?

于 2011-11-26T13:46:39.083 回答