Question

Je suis occupé avec la mise en œuvre ZXing un QRCodeReader dans mon projet. QRCodeReader est principalement C ++ et mon projet Objective-C. J'ai réussi à le mettre en œuvre correctement pour que je puisse utiliser les objets QRCodeReader dans ma mise en œuvre objective-C (fichier .mm). Mais maintenant, je dois passer cet objet C ++ à la propriété zxWidController.reader.

Cela signifie que je devra définir l'objet C ++ dans un objet NSSet.

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

Le code ci-dessus fait l'affaire. Je Casted l'objet C de la (id) et maintenant il compile correctement. Mais est-ce la bonne façon de le faire?

est cette manière de programmer la bonne façon de le faire?

Y at-il d'autres / meilleures façons d'atteindre mon objectif?

Était-ce utile?

La solution

Le type d'un C est pas un type Objective C. Vous ne pouvez pas envoyer des messages, en particulier de retenir et de libérer, ce qui fait NSSet. Il y a un type Objectif C du même nom que vous souhaitez utiliser. (Je vais mettre à jour mon autre réponse).

Autres conseils

Le code ci-dessus fait l'affaire. Je Casted l'objet C de la (id) et maintenant il compile correctement. Mais est-ce la bonne façon de le faire?

Non. Vous ne pouvez pas simplement faire un pointeur arbitraire dans un pointeur d'objet Objective-C valide par coulée à id.

est cette manière de programmer la bonne façon de le faire?

Encore une fois, non.

Y at-il d'autres / meilleures façons d'atteindre mon objectif?

Vous pouvez essayer une des opérations suivantes:

  • Redéfinir votre classe zxWidController prendre un pointeur vers un objet C ++ au lieu d'un objet Obj-C.

  • Wrap qrcodeReader dans un NSValue.

  • Jetez un oeil à NSPointerArray en remplacement de NSSet. Certainement lire les documents avant d'essayer de l'utiliser -. Vous devez configurer ses polices de gestion de mémoire pour faire la bonne chose pour le type de pointeur de stockage que vous êtes la

Mineure pinailler: Oublier un instant sur le fait que les points qrcodeReader à un objet C ++, il semble stupide de créer un ensemble vide juste pour que vous pouvez ajouter un objet à lui. Si vous allez utiliser un ensemble Obj-C, puis créez soit à l'aide de + setWithObject:. Ou utiliser NSMutableSet à la place

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top