Ajout d'un binding pour un NSTextField , exposeBinding

Philippe49Philippe49 Membre
novembre 2007 modifié dans API AppKit #1
La couleur de fond n'est pas dans l'inspecteur IB des NSTextField.
Suivant la doc StoringNSColorInDefaults, on peut la rajouter par programme ainsi :

1) Sous-classer NSText Field, et dans la méthode +(void)initialize exposer le binding :
#import <Cocoa/Cocoa.h>
@interface MyTextField : NSTextField {
}
@end

#import "MyTextField.h"
@implementation MyTextField
+(void)initialize
{
[self exposeBinding:@backgroundColor];
}
@end


2) Dans un délégué de l'application, installer le binding :

[textField bind:@backgroundColor toObject:[NSUserDefaultsController sharedUserDefaultsController]
withKeyPath:@values.backgroundColor
options:
[NSDictionary dictionaryWithObject: NSUnarchiveFromDataTransformerName
                forKey:NSValueTransformerNameBindingOption]
];



Questions

A quoi sert ce exposeBinding, sachant qu'on peut faire marcher le binding sans cela ?

Sous-classer NSTextField est-il ici nécessaire ?

Réponses

  • Philippe49Philippe49 Membre
    20:35 modifié #2
    Les réponses sont rares ...

    La question se développe ...

    Lors d'une déclaration @property, le exposeBinding reste-t-il souhaité ? 

    Les essais simplistes montrent que mettre ou ne pas mettre le "exposeBinding" ne change rien
  • laurrislaurris Membre
    20:35 modifié #3
    D'après mon expérience, exposeBinding: permet de savoir que ce binding est utilisable par d'autre classes. Par exemple, quand on demandera quels sont les bindings disponibles avec infoForBinding:
    Les bindings "officiels" documentés sont automatiquement exposés donc ce n'est valable que si c'est un binding "maison".
  • Philippe49Philippe49 Membre
    20:35 modifié #4
    Oui, un catalogue des bindings est tenu à  jour, maintenant les propriétés fonctionnent de manière (quasi?)identique avec un catalogue aussi, et l'utilisation du KVO et KVC ... 

    En attendant plus d'info de la part d'Apple, je continue à  mettre le "exposeBinding" ...
Connectez-vous ou Inscrivez-vous pour répondre.