2011-10-20 57 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來創建它。

相關問題