Domanda

Sono impegnato a implementare Zxing con un QRCodeReader nel mio progetto. QRCodeReader è principalmente C ++ e il mio progetto Objective-C. Sono riuscito a implementarlo correttamente in modo da poter usare gli oggetti QRCoderAder nella mia implementazione Objective-C (file .MM). Ma ora devo passare questo oggetto C ++ alla proprietà ZxWidController.Reader.

Ciò significa che dovrò impostare l'oggetto C ++ in un oggetto NSSET.

QRCodeReader* qrcodeReader = new QRCodeReader();
NSSet *readers = [[NSSet alloc ] init];
[readers setByAddingObject:(id)qrcodeReader];
widController.readers = readers;
[readers release];

Il codice sopra fa il trucco. Ho lanciato l'oggetto C ++ a (ID) e ora si compila correttamente. Ma è questo il modo corretto per farlo?

Questo modo di programmazione è il modo corretto per farlo?

Ci sono altri modi migliori per raggiungere il mio obiettivo?

È stato utile?

Soluzione

Un tipo C ++ non è un tipo C oggettivo. Non è possibile inviarlo messaggi, in particolare trattenere e rilasciare, cosa che fa NSSET. Esiste un tipo C oggettivo lo stesso nome che si desidera utilizzare. (Aggiornerò l'altra mia risposta).

Altri suggerimenti

Il codice sopra fa il trucco. Ho lanciato l'oggetto C ++ a (ID) e ora si compila correttamente. Ma è questo il modo corretto per farlo?

No. Non puoi semplicemente fare un puntatore arbitrario in un puntatore oggettivo Objective-C valido lanciandolo su ID.

Questo modo di programmazione è il modo corretto per farlo?

Ancora una volta, no.

Ci sono altri modi migliori per raggiungere il mio obiettivo?

Puoi provare uno dei seguenti:

  • Ridefinire la tua classe ZxWidController per prendere un puntatore a un oggetto C ++ anziché a un oggetto OBJ-C.

  • Avvolgi QrCodeReader in un NSValue.

  • Dai un'occhiata a NSPOInterarray in sostituzione di NSSET. Sicuramente leggi i documenti prima di provare a usarlo: devi configurare le sue politiche di gestione della memoria per fare la cosa giusta per il tipo di puntatore che stai memorizzando.

Minor Nitpick: dimenticando per un momento sul fatto che QrCodeReader indica un oggetto C ++, sembra sciocco creare un set vuoto solo in modo da poter aggiungere un oggetto ad esso. Se stavi per utilizzare un set OBJ-C, crealo usando +setWithObject: o usa invece NSMutableSet.

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