Pregunta

Estoy ocupado implementando ZXing con un QRCoderader en mi proyecto. QRCodeReader es principalmente C ++ y mi proyecto Objective-C. He logrado implementarlo correctamente para poder usar los objetos QRCodeReader en mi implementación objetiva-C (archivo .mm). Pero ahora necesito pasar este objeto C ++ a la propiedad ZXWIDController.Reader.

Esto significa que tendré que configurar el objeto C ++ en un objeto NSSET.

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

El código anterior hace el truco. Lanzé el objeto C ++ a (ID) y ahora se compila correctamente. ¿Pero es esta la forma correcta de hacerlo?

¿Es esta forma de programar la forma correcta de hacer esto?

¿Hay alguna otra / mejor formas de lograr mi objetivo?

¿Fue útil?

Solución

Un tipo C ++ no es un tipo de objetivo C. No puede enviarle mensajes, en particular, retener y liberar, lo que hace NSSET. Hay un tipo de objetivo C del mismo nombre que desea usar. (Actualizaré mi otra respuesta).

Otros consejos

El código anterior hace el truco. Lanzé el objeto C ++ a (ID) y ahora se compila correctamente. ¿Pero es esta la forma correcta de hacerlo?

No. No puede simplemente convertir un puntero arbitrario en un puntero de objeto de Objective-C válido al lanzarlo a ID.

¿Es esta forma de programar la forma correcta de hacer esto?

De nuevo, no.

¿Hay alguna otra / mejor formas de lograr mi objetivo?

Puede probar cualquiera de los siguientes:

  • Redefine su clase ZXWidController para llevar un puntero a un objeto C ++ en lugar de un objeto OBJ-C.

  • Envolver QRCoderader en un Value.

  • Eche un vistazo a NSpointerArray como un reemplazo para NSSET. Definitivamente lea los documentos antes de intentar usarlo: debe configurar sus políticas de administración de memoria para hacer lo correcto para el tipo de puntero que está almacenando.

Menor Nitpick: olvidando por un momento sobre el hecho de que QRCodReader señala un objeto C ++, parece tonto crear un conjunto vacío solo para que pueda agregarle un objeto. Si iba a usar un conjunto OBJ-C, entonces cree usando +setWithObject: o use nsmUtableSet en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top