Основные данные изображения не будут загружаться в ячейку изображения nstableView
-
30-09-2019 - |
Вопрос
В моем коде я храним изображение в мою основную модель данных (отлично работает). Если я настрою мой взгляд, чтобы иметь 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 под ним.