我正忙着在我的项目中使用QRCodeReader实现ZXing。 QRCodeReader主要是C ++和我的项目目标-C。 我已设法正确实现它,因此我可以将QRCodeReader对象用于我的objective-C实现(.mm文件)。 但是现在我需要将这个C ++对象传递给zxWidController.reader属性。
这意味着我必须将C ++对象设置为NSSet对象。
QRCodeReader* qrcodeReader = new QRCodeReader();
NSSet *readers = [[NSSet alloc ] init];
[readers setByAddingObject:(id)qrcodeReader];
widController.readers = readers;
[readers release];
上面的代码可以解决问题。我将C ++对象转换为(id),现在它正确编译。但这是正确的方法吗?
这种编程方式是否有正确的方法来执行此操作?
有没有其他/更好的方法来实现我的目标?
答案 0 :(得分:3)
C ++类型不是Objective C类型。你不能发送消息,特别是保留和释放NSSet。您想要使用与您名称相同的Objective C类型。 (我会更新我的其他答案)。
答案 1 :(得分:1)
上面的代码可以解决问题。我将C ++对象转换为(id)和现在 它编译得当。但这是正确的方法吗?
不。您不能通过将其转换为id来将任意指针指向有效的Objective-C对象指针。
这种编程方式是否有正确的方法来执行此操作?
再次,不。
有没有其他/更好的方法来实现我的目标?
您可以尝试以下任何一项:
重新定义zxWidController类,以获取指向C ++对象而不是Obj-C对象的指针。
在NSValue中包装qrcodeReader。
看看NSPointerArray作为NSSet的替代品。在尝试使用它之前一定要阅读文档 - 你必须配置它的内存管理策略,为你正在存储的指针类型做正确的事情。
轻微的挑剔:忘了qrcodeReader指向C ++对象这一事实,创建一个空集似乎很愚蠢,以便你可以添加一个对象。如果您打算使用Obj-C集,则使用+ setWithObject:创建它,或者使用NSMutableSet。