【问题标题】:Delegates with Multiple Views concerning Linea Pro Barcode Scanner代表们对 Linea Pro 条码扫描仪有多种看法
【发布时间】:2023-12-22 18:55:01
【问题描述】:

我正在使用 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方法并在 viewWillDisappear 方法中放置一个 [dtdev removeDelegate:self];。之后条码扫描器在调用 removeDelegate 后将不再工作,即使再次通过 addDelegate 添加也是如此。

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

这是一个错误还是我的想法不正确?

【问题讨论】:

    标签: iphone ios objective-c barcode-scanner linea-pro


    【解决方案1】:

    我很惊讶添加/删除委托不起作用,听起来像是一个错误。如果您有一个导航控制器示例,我建议您将其发送到 LineaPro。

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

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

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

    【讨论】:

      【解决方案2】:

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

      [dtdev addDelegate:self];

      viewDidAppear 方法中。

      希望对你有帮助。

      【讨论】: