Domanda

In IB è facile associare un'etichetta o un campo di testo al keyPath di alcuni controller.

NSDockTile (disponibile tramite [[NSApp dockTile] setBadgeLabel: @ " 123 "]) non appare in IB, e non riesco a capire come legare programmaticamente il suo " badgeLabel " proprietà come te potresti associare una colonna label / textfield / table.

Qualche idea?

È stato utile?

Soluzione

NSDockTile non ha alcun vincolo, quindi il controller dovrà aggiornare manualmente il riquadro del dock. Potresti farlo usando KVO che avrebbe lo stesso effetto di vincolarlo.

Crea un contesto come globale:


static void* MyContext=(void*)@"MyContext";

Quindi, nel tuo metodo init:


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

Devi quindi implementare questo metodo per ricevere notifiche sulle modifiche al percorso chiave:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

Assicurati di rimuovere l'osservatore quando l'oggetto controller scompare.

Altri suggerimenti

Se NSDockTile supporta i binding, è possibile utilizzare il metodo bind: toObject: withKeyPath: options: per impostare i binding sulla proprietà badgeLabel. Consultare la documentazione per i dettagli su quali argomenti utilizzare. Se non funziona, è possibile implementare l'osservazione del valore-chiave nella classe del controller e aggiornare l'etichetta ogni volta che il valore cambia, o addirittura sostituire NSDockTile per creare una sottoclasse compatibile con i binding.

Ho provato molte varianti di bind: toObject: withKeyPath: options: su NSDockTile, su un controller, sull'origine dati. Non riesco a capire una combinazione che funzioni. In alternativa, esiste un modo per avere un oggetto BatchController che può essere associato all'origine dati e quindi aggiorna il badge? Come posso prendere un oggetto NSO e renderlo vincolante?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top