0

我正在使用 Linea Pro 硬件条码扫描仪开展一个项目。开始时,我使用了以下答案How do I use the Linea-Pro SDK for IOS?

我的应用程序由一个导航控制器(包含两个条目的表)和两个连接的视图控制器(每个都使用扫描仪)组成。

我在导航控制器的 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 再次添加的。

我没有看到另一种将两个视图控制器添加为委托然后在委托方法中放入这样的代码的方法:“我可见吗”?--> 继续:否则中断;(但这很愚蠢,对吧?)

这是一个错误还是我没有直接思考?

4

2 回答 2

0

我很惊讶添加/删除委托不起作用,听起来像一个错误。如果你有一个导航控制器的例子,我建议你把它发送到 LineaPro。

您确定 sharedDevice 仍然设置并且当您再次调用 addDelegate 时您的 dtdev 不是 nil 吗?

简单的解决方案可能正是您的想法。将此添加到两个委托的顶部(因为您使用的是导航控制器)。

if (self != self.navigationController.visibleViewController) 返回;

于 2014-01-07T23:27:40.640 回答
0

我有同样的问题,我通过添加另一个解决了这个问题:

[dtdev addDelegate:self];

viewDidAppear方法。

我希望这能帮到您。

于 2014-03-11T15:23:57.357 回答