Je ne suis pas sûr de ce qui se passe à cause de votre problème, mais il y a un moyen facile de savoir. Raccordez un NSValueTransformer à la liaison. Ensuite, dans ce transformateur, vous pouvez enregistrer des données pour savoir si vous transmettez une valeur nulle, ou vous pouvez transformer votre valeur de données en NSImage et la renvoyer ... En gros, vous pouvez faire ce que vous voulez dans la classe transformateur. En voici un que j'utilise sur les données d'image dans un modèle de données de base.
@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
En classe AppController vous initialisez le transformateur:
+ (void)initialize {
DataToImageTransformer *transformer = [[DataToImageTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"DataToImageTransformer"];
[transformer release];
}
Ensuite, dans Interface Builder vous mettre "DataToImageTransformer" dans la liaison. Maintenant vous avez le contrôle sur la liaison et pouvez faire ce que j'ai expliqué plus tôt dans la classe du transformateur. Notez que j'utilise NSKeyedArchiver pour convertir un NSImage en données et revenir en arrière, mais vous pouvez utiliser tiffRepresentation ou toute autre méthode que vous voulez à sa place.
Merci, cela a fonctionné! Le seul problème est que j'obtiens un avertissement obsolète en liant des données à un NSTableColumn. Mais votre stratégie consistant à enregistrer les données d'image à l'aide de NSKeyedArchiver et à les récupérer à l'aide de ce transformateur a été couronnée de succès. – jcady
Je me souviens de quelque chose à propos de l'une des attaches étant obsolète, utilisez donc l'autre liaison à la place ... est-ce la valeur de liaison? Vous pouvez probablement utiliser ceci avec cette liaison aussi, et si ce n'est pas juste modifier le transformateur comme nécessaire pour retourner tous les objets nécessaires. – regulus6633