Domanda

Ho due controlli nel mio file Interface Builder e per ognuno di questi controlli ho creato una classe delegata separata nel codice (Control1Delegate e Control2Delegate).Ho creato due "Oggetti" nel generatore di interfacce, li ho resi di quel tipo e ho collegato loro i controlli come delegati.I delegati funzionano bene.Il mio problema è che devo condividere le informazioni da un delegato all'altro e non sono sicuro di come.

Qual è il modo migliore per farlo?Unire i due delegati in un'unica classe o accedere in qualche modo a una terza classe che possano leggere entrambi?Dato che in realtà non sto inizializzando la classe da nessuna parte nel mio codice, non sono sicuro di come ottenere un riferimento alla sua istanza effettiva (se ce n'è una istanza effettiva), o anche accedere alla classe "principale" che è arrivato il progetto.

È stato utile?

Soluzione

È possibile aggiungere punti vendita da uno dei delegati all'altro delegato.Esistono due modi per aggiungere una presa a un oggetto in IB (supponendo che tu stia utilizzando Xcode/IB versione 3.0 o successiva:

  1. Se non hai ancora generato il codice per le classi del delegato, seleziona il delegato desiderato, quindi apri la scheda "Identità oggetto" nell'ispettore IB.Aggiungi un "Class outlet" di tipo NSObject.Dovresti quindi essere in grado di impostare questa nuova presa sull'altro delegato.Ovviamente dovrai generare il codice per la tua classe delegata e aggiungere i file sorgente generati al tuo progetto Xcode prima di poter caricare il pennino.

  2. Se hai già generato il codice per la classe delegata (o hai aggiunto un NSObject al tuo NIB e hai impostato la sua classe su una classe esistente nel tuo progetto Xcode), aggiungi una variabile di istanza alla classe delegata:

    IBOutlet id outletToOtherDelegate;

    Finché il tuo progetto Xcode è aperto (come indicato dalla bolla verde nella parte inferiore sinistra della finestra NIB), IB rileverà automaticamente la nuova presa e ti consentirà di assegnarla all'altro oggetto delegato nel tuo NIB.

Cocoa collega automaticamente queste prese al momento del caricamento del NIB.Una volta awakeFromNib viene chiamato su istanze dei tuoi oggetti delegati, puoi presumere che tutti gli altri oggetti nel NIB siano stati istanziati e che tutte le prese siano state collegate.Non dovresti assumere un ordine sulle chiamate a awakeFromNib, Tuttavia.

Altri suggerimenti

Penso che sia possibile creare punti vendita su ciascuno e collegarli in modo incrociato in modo che ciascuno abbia sempre gli stessi dati.Se c'è un oggetto modello che devono condividere, è abbastanza ordinato.In realtà non so come farlo;Penso di averlo visto in un tutorial sull'iPhone una volta!

Al momento non ho il mio Mac davanti a me poiché sono al lavoro, ma sarebbe possibile associare un'istanza di un delegato a un membro dell'altro delegato?Ciò sarebbe simile, ad esempio, all'associazione di un NSArrayController a un membro di un'altra classe controller.

Tuttavia, a seconda di cosa stanno facendo le classi delegate, se le attività sono simili probabilmente le combinerei semplicemente in una classe.Ciò eliminerebbe del tutto il problema.

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