2014-07-16 26 views
7

आग नहीं लगाते हैं मुझे कॉर्डोवा प्लगइन (आईओएस वन) से तत्काल कॉलबैक के बाद फायरिंग के साथ परेशानी होती है। XCode डिबगर में मैं स्पष्ट रूप से यह एक अलग pluginResult साथकॉर्डोवा आईओएस प्लगइन से बाद के कॉलबैक

से अधिक
[self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId]; 

कई बार (तत्काल उत्तराधिकार में), हर बार कदम को देखते हैं। द्वारा

[locationManager requestStateForRegion:region]; 

ट्रिगर किया जाता है यही कारण है कि जो मैं न करें (और नहीं कर सकते हैं) नियंत्रण।

समस्या जावास्क्रिप्ट पक्ष पर है, कॉलबैक केवल एक बार निकाल दिया जाता है।

क्या है (वास्तव में ऐसा नहीं) अजीब बात यह है कि अगर मैं उस कॉलबैक में कुछ अवरोधन पेश करता हूं, जैसे alert(), कॉलबैक कई बार (अपेक्षित के रूप में) निकाल दिया जाता है। यह अच्छा है लेकिन ऐप में मुझे alert() की आवश्यकता नहीं है।

यदि मैं इसे समझता हूं, तो commandDelegate को थ्रेडिंग और क्यूइंग का ख्याल रखना चाहिए, लेकिन ऐसा लगता है कि ऐसा नहीं होता है। सवाल यह है कि प्रत्येक बार sendPluginResult कहलाता है कि जेएस कॉलबैक कैसे निकाला जाए।

बहुत धन्यवाद!

उत्तर

22

तो, यह मुद्दा थ्रेडिंग/क्यूइंग में नहीं था।

यह पता चला कि आप केवल एक बार एक callbackId उपयोग करने के लिए जब तक आप कॉर्डोबा सफाई के लिए निर्देश दे कि callbackIdtrue को CDVPluginResult.keepCallback की स्थापना द्वारा अनुमति दी जाती है। ध्यान कि keepCallback एक BOOL संपत्ति नहीं है, तो आप कॉल करने के लिए आवश्यकता हो सकती है [pluginResult setKeepCallbackAsBool:YES];

CDVPluginResult* pluginResult = [sendPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:key]; 
[pluginResult setKeepCallbackAsBool:YES]; // here we tell Cordova not to cleanup the callback id after sendPluginResult() 
[self.commandDelegate sendPluginResult:pluginResult callbackId:monitoredRegions.callbackId]; 

क्या बातें को खराब करता है कि अगर आपको लगता है कि कॉलबैक में alert() की तरह एक अवरुद्ध कॉल परिचय, Cordova आप एक से अधिक लगातार कर दूँगी है sendPluginResult उसी callbackId के साथ।

ध्यान रखें कि आप एक CDVPluginResult जो keepCallbackfalsecallbackId है कि आप और आवश्यकता नहीं है जारी करने के लिए है के साथ sendPluginResult की जरूरत हो सकती है।

+0

यह निर्धारित करने के लिए धन्यवाद कि सेटकिप कॉलबैक क्या करता है। मैं इस परिदृश्य पर अपने सिर को टक्कर लगी हूं। – mpoisot

+0

मेरे पास 'pluginResult.keepCallback = [NSNumber numberWithBool: YES] था;' और यह बस काम नहीं करता था। मैंने इसे '[प्लगइन रीसेट सेटकिप कैलबैकएएसबूल: हाँ] में बदल दिया;' और यह जादुई रूप से काम किया! – Solidak

संबंधित मुद्दे