2011-10-20 48 views
0

我忙于在项目中使用QRCodeReader实现ZXing。 QRCodeReader主要是C++和我的项目目标-C。 我已经设法实现它,所以我可以使用QRCodeReader对象到我的objective-C实现(.mm文件)中。 但现在我需要将此C++对象传递给zxWidController.reader属性。这意味着我将不得不将C++对象设置为NSSet对象。将C++对象添加到Objective C集合(NSSet)时遇到问题

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

上面的代码是有用的。我铸造了C++对象(id),现在它编译正确。但是,这是做到这一点的正确方法吗?

这种编程方式是否正确地执行此操作?

有没有其他更好的方法来实现我的目标?

回答

3

C++类型不是Objective C类型。你不能发送它的消息,特别是保留和释放,哪些NSSet。有一个与您想要使用的名称相同的Objective C类型。 (我会更新我的其他答案)。

1

上面的代码有诀窍。我铸造了C++对象(id),现在它编译正确。但是,这是做到这一点的正确方法吗?

你不能仅仅通过它铸造ID使任意指针变成一个有效的Objective-C对象指针。

这种编程方式是否正确地执行此操作?

再次,没有。

有没有其他更好的方法来实现我的目标?

你可以尝试以下任何一项:

  • 重新定义你的zxWidController类取一个指向C++对象,而不是一个OBJ-C对象。

  • 将qrcodeReader封装在一个NSValue中。

  • 查看NSPointerArray以取代NSSet。在尝试使用它之前,肯定会阅读这些文档 - 您必须配置它的内存管理策略,以针对您正在存储的指针类型进行正确的操作。

小鸡蛋里挑骨头:忘记了有关qrcodeReader指向一个C++对象,似乎傻创建一个空集只是让你可以添加一个对象给它的事实时刻。如果您打算使用Obj-C集合,则可以使用+ setWithObject:或使用NSMutableSet来创建它。

相关问题