无法从 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