Domanda

sto scrivendo Objective-C ++ in Xcode per iOS. Il mio progetto è per lo più classi C ++ e un paio di classi Objective-C al più alto livello. Le mie classi C ++ contengono Objective-C elementi dell'interfaccia utente e ho bisogno di loro di ricevere eventi dell'interfaccia utente. E 'possibile per un elemento dell'interfaccia utente per chiamare direttamente una funzione C ++ membro? Cioè c'è un equivalente a questa richiesta di una funzione C ++:

[control addTarget:object action:@selector(action:) forControlEvents:event];    

Da quello che ho capito @selector non mi aiuterà qui. Avrei bisogno di un altro modo per rendere il controllo chiamare il mio funzione membro -? Si fa a esistere

Per ora, sto usando una classe di ricevitore Objective-C, un membro del mio classi C ++, che riceve gli eventi di interfaccia utente e quindi chiama la mia classe C ++ in modo appropriato, ma questo sembra un modo indiretto per raggiungere tale obiettivo. Se quello che ho descritto non è possibile, c'è un modo migliore per fare quello che sto cercando di fare?

È stato utile?

Soluzione

Credo che hai già scoperto la soluzione più semplice. Si potrebbe incapsulare ulteriormente questa funzionalità implementando ponte Obj-C / C ++ in C ++ classe di base e ricavare le tue classi logica di business da quello.

è un'altra opzione, che è quello di fare questo a livello di runtime Objective-C. Avere la classe C ++ generare una nuova classe Objective-C con objc_allocateClassPair(), aggiungere un metodo per la gestione della tua azione con class_addMethod(), ecc (vedi Objective-C runtime di riferimento ) non vedo alcuna ragione evidente per cui ci si vuole imboccare questa strada, ma è bello per essere a conoscenza di esso.

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