2013-04-04 15 views
0

我正在使用Linea Pro硬件條碼掃描器進行項目。爲了開始使用我使用以下的答案How do I use the Linea-Pro SDK for IOS?有關Linea Pro條碼掃描器的多個視圖的代表

我的應用程序由一個導航控制器(兩個表的表)和兩個連接的視圖控制器(他們每個人使用掃描儀)組成。

我連接的設備在導航控制器的viewDidLoad中是這樣的:

dtdev=[DTDevices sharedDevice]; 
[dtdev connect]; 

在這兩個視圖控制器我註冊設備中viewDidLoad方法是這樣的:

dtdev=[DTDevices sharedDevice]; 
[dtdev addDelegate:self]; 
[super viewDidLoad]; 

不幸的是,當我點擊設備掃描按鈕時,兩個視圖控制器的委託方法都被調用,因爲兩者都在其中註冊。

爲了防止這種行爲,我希望儘可能將viewController設置爲委託,因此我將[dtdev addDelegate:self];進入viewWillAppear方法並把一個[dtdev removeDelegate:self];viewWillDisappear方法。之後,條形碼掃描器在調用removeDelegate後將不再工作,即使通過addDelegate再次添加。

我沒有看到另一種方式,只是將兩個視圖控制器添加爲委託,然後在委託方法中像這樣放置代碼:「我是否可見」? - > continue:else break; (但是這很愚蠢,對嗎?)

這是一個錯誤還是我不直截了當?

回答

0

我很驚訝添加/刪除委託不起作用,聽起來像一個錯誤。如果你有一個導航控制器的例子,那麼我建議將它發送到LineaPro。

您確定sharedDevice仍然設置,並且當您再次調用addDelegate時,您的dtdev不是零嗎?

簡單的解決方案可能就是您的想法。將其添加到兩個代表的頂部(因爲您正在使用導航控制器)。

if(self!= self.navigationController.visibleViewController)return;

0

我有同樣的問題,我加入 另一個解決了這個問題:

[dtdev addDelegate:self];

viewDidAppear方法。

我希望這會幫助你。