通过绑定和值转换器在视图(NSTableColumn)中显示一对多关系

发布于 2024-12-17 07:51:50 字数 1324 浏览 1 评论 0原文

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

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

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

它对所有属性都工作正常,其他列显示正确的值。

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

() 的关系错误, 名称别名、isOptional 1、isTransient 0、实体标签、 重命名标识符别名、验证谓词 ( )、警告 ( )、 versionHashModifier(空),目标实体TagAlias, inverseRelationship 标签,0x10053db10 上的 minCount 0、maxCount 0

这似乎是某种关系的 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 ...

I have an entity Tag (in core data) that have some attributes and a to-many relationship named "aliases".

My ArrayController is "bind" in Xcode to:

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

It work OK for all Attributes, the others columns present the correct values.

In one column I try to "display" this to-many relationship. If I do it naively and bind the Value of my NSTableColumn to my ArrayController.arrangedObjects.aliases (like all other attributes) I get this on the screen:

Relationship fault for (),
name aliases, isOptional 1, isTransient 0, entity Tag,
renamingIdentifier aliases, validation predicates ( ), warnings ( ),
versionHashModifier (null), destination entity TagAlias,
inverseRelationship tag, minCount 0, maxCount 0 on 0x10053db10

It seems to be some kind of CoreData proxy for the relationship...

I then build a subclass of NSValueTransformer:

@interface tagAliasesToStringTransformer : NSValueTransformer

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

@end

and tried to use it as a Value Transformer in the binding. But I'm lost in my implementation:

@implementation tagAliasesToStringTransformer

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

+ (BOOL)allowsReverseTransformation {
    return NO;
}

- (id)transformedValue:(id)value {

    if (value == nil) return nil;

    ...
}

@end

In the method transformedValue:, value is of class '_NSFaultingMutableSet' and I don't know how to get a Set/Array of the aliases or anything useful.

The goal is to build a NSString of the concatenation of each alias. Something like:

aTag : alias1 alias2 alias3 ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别靠近我心 2024-12-24 07:51:50

我找到了解决方案:

_NSFaultingMutableSet 实际上是一种 NSSet,因此通过执行以下操作:

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

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

您可以访问所有实体。

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

I found the solution:

_NSFaultingMutableSet is actually a kind of NSSet, so by doing something like this:

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

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

you get access to all the entity.

Don't know why it's obvious now and not one week ago... getting out of newbie zone ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文