Основные данные изображения не будут загружаться в ячейку изображения nstableView

StackOverflow https://stackoverflow.com/questions/2862330

Вопрос

В моем коде я храним изображение в мою основную модель данных (отлично работает). Если я настрою мой взгляд, чтобы иметь NSImageView и связывать его данные для контроллера ключа: Выбор и ModelkeyPath: MyImagePath, это работает. Он покажет каждое изображение для выбранной строки.

Затем я создаю новый столбец в My NStableView и перетащите ячейку изображения на столбец. Однако я не могу получить мои основные привязки данных, чтобы изображение отображалось в ячейке. Я попробовал привязать как ценность, так и данные, но не повезло.

Поскольку я уверен, что изображение хранится должным образом, что я делаю не так в моем привязке, чтобы предотвратить появление изображения в таблице-ячейке?

Большое спасибо.

(Мой фон: новый разработчик какао, который недавно прошел через все книгу Hillegass.)

Это было полезно?

Решение

Я не уверен, что происходит, чтобы вызвать вашу проблему, но есть простой способ узнать. Подсоедините Nsvaluetransformer к связыванию. Затем в этом трансформатере вы можете зарегистрировать вещи, чтобы узнать, если вы передаете значение Nil, или вы можете преобразовать ваше значение данных в NSImage и пропустить обратно ... в основном вы можете делать все, что вы хотите в классе трансформатора. Вот один, который я использую на данных изображения в модели Core-Data.

@interface DataToImageTransformer : NSValueTransformer {

}

@end


@implementation DataToImageTransformer

+ (Class)transformedValueClass {
    return [NSImage class];
} // the class of the return value from transformedValue:

+ (BOOL)allowsReverseTransformation {
    return YES;
} // if YES then must also have reverseTransformedValue:

- (id)transformedValue:(id)value {
    if (value == nil || [value length] < 1) return nil;
    NSImage* i = nil;
    if ([value isKindOfClass:[NSData class]]) {
        i = [NSKeyedUnarchiver unarchiveObjectWithData:value];
    }
    return i;
}

- (id)reverseTransformedValue:(id)value {
    if (value == nil) return nil;
    NSData* d = nil;
    if ([value isKindOfClass:[NSImage class]]) {
        d = [NSKeyedArchiver archivedDataWithRootObject:value];
    }
    return d;
}

@end

В классе AppController вы инициализируете трансформатор:

+ (void)initialize {
    DataToImageTransformer *transformer = [[DataToImageTransformer alloc] init];
    [NSValueTransformer setValueTransformer:transformer forName:@"DataToImageTransformer"];
    [transformer release];
}

Затем в интерфейсе Builder вы поместите «datatoimageTransformer» для привязки. Теперь у вас есть контроль над привязкой и может сделать, как я объяснял ранее в классе трансформатора. Обратите внимание, что я использую NskeeedArchiver, чтобы преобразовать NSImage для данных и обратно, но вы можете использовать TIFFrePresentation или любой другой метод, который вы хотите на его месте.

Другие советы

Если у кого-то есть проблемы с предложенным методом с XCode 6. Я создал SWIFT Project, используя приложение на основе документов. С помощью управления ImageWell (NSImageView) привязки работают непосредственно без значения необходимости трансформатора. Хотя деталь, поставьте вас привязку на привязку данных самой точки зрения, не на ImageCell objet под ним.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top