无法从 Objective C 插件返回到 Ionic/Cordova 应用程序时出错

Posted

技术标签:

【中文标题】无法从 Objective C 插件返回到 Ionic/Cordova 应用程序时出错【英文标题】:Can't Get Error To Return To Ionic/Cordova App From Objective C Plugin 【发布时间】:2017-01-19 16:27:47 【问题描述】:

我为蓝牙斑马打印机编写了一个插件。我可以让它工作并且打印正常,但是如果打印机关闭或未连接,我需要将错误返回给我的应用程序。我可以直接从 Objective C 在警报中打开它,但我确实需要将错误返回到我的移动应用程序,以便在出错时为用户创建新操作。

代码可以编译和构建,但是当我运行代码时,它不会将错误返回给我的 javascript 错误函数。请记住,我对 Objective C 不是很熟悉,并且正在努力解决这个问题。

这里是应该发回应用程序的 Objective C 代码(我可以看到代码进入了这个函数,但没有被发回):

__block CDVPluginResult* result; //Declared at the beginning of the print function in .m file

dispatch_async(dispatch_get_main_queue(), ^
            if(success != YES || error != nil) 

result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
                          messageAsString:[NSString stringWithFormat:
                          @"Either the printer is turned off or not connected "]];
            
        );

这是我发起对打印机的调用的 javascript 函数。

$scope.printTicket = function () 
 $ionicPlatform.ready(function () 

    cordova.plugins.zebra.printer.sendZplOverBluetooth($scope.printObj, function successCallback () 
      console.log('SUCCESS: Print');

    , function errorCallback () 
      console.log('ERROR: Print');

    );

 )

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

您需要在使用sendPluginResult 创建插件结果后实际发送插件结果 - 类似于:

- (void) yourPluginFunction: (CDVInvokedUrlCommand*)command

    __block CDVPluginResult* result; //Declared at the beginning of the print function in .m file

    dispatch_async(dispatch_get_main_queue(), ^
        if(success != YES || error != nil) 

            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR
                messageAsString:[NSString stringWithFormat:
                @"Either the printer is turned off or not connected "]];

            [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
        
    );

【讨论】:

工作完美。我实际上在您发布之前就发现了这个,但我希望您获得 ^ 投票。谢谢。

以上是关于无法从 Objective C 插件返回到 Ionic/Cordova 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

Objective C - WebView无法从顶部重新加载

Objective C - UITextFieldTextDidChangeNotification 没有响应更正选择

Objective C locationManager 无法获取当前位置,总是返回 0

从 Objective-C 到 Swift 的 Swift 传递块

Objective-C 限制文本输入长度

无法从Objective C中的swift类调用方法