отображение отношения ко многим в представлении (NSTableColumn) через Binding и Value Transformer - PullRequest
1 голос
/ 22 ноября 2011

У меня есть тег сущности (в основных данных), который имеет некоторые атрибуты и отношение ко многим, называемое «псевдонимами».

Мой ArrayController в Xcode «bind» для:

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

Он работает нормально для всех атрибутов, остальные столбцы содержат правильные значения.

В одном столбце я пытаюсь «отобразить» это отношение ко многим.Если я делаю это наивно и связываю Значение моего NSTableColumn с моим ArrayController.arrangedObjects.aliases (как и все другие атрибуты), я получаю это на экране:

Ошибка отношения для (), псевдонимы имени,isOptional 1, isTransient 0, тег объекта, псевдонимы renamingIdentifier, предикаты проверки (), warnings (), versionHashModifier (null), объект назначения TagAlias, тег inverseRelationship, minCount 0, maxCount 0 на 0x10053db10

Itпохоже, что-то вроде 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', и я не знаю, как получить Set / Array псевдонимов или что-нибудь полезное.

Цель состоит в том, чтобы создать строку NSS для объединения каждого псевдонима.Что-то вроде:

aTag: alias1 alias2 alias3 ...

1 Ответ

3 голосов
/ 26 ноября 2011

Я нашел решение:

_NSFaultingMutableSet на самом деле является разновидностью NSSet, поэтому, выполнив что-то вроде этого:

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

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

вы получите доступ ко всем сущностям.

Не знаю, почему это очевидно сейчас, а не неделю назад ... выходить из зоны новичка?

...