2015-05-21 3 views
6

नहीं कहा जाता है, मैं वॉचकिट ऐप से पैरेंट आईओएस ऐप लॉन्च करने की कोशिश कर रहा हूं। मैं ऐप लॉन्च करने के लिए यूआरएल योजना का उपयोग कर रहा हूं। लेकिन ऐसा लगता है किhandleWatchKitExtensionRequest को

-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply 

बेकार है। ऐसा लगता है कि घड़ी ऐप बैकगाउंड में ऐप लॉन्च करता है। लेकिन मूल ऐप वॉचकिट अनुरोध को संभाल नहीं करता है। मैंने एक नई परियोजना में अपना दृष्टिकोण आजमाया और यह पूरी तरह से काम करता है। क्या मुझे कोई ध्यान देने की ज़रूरत है?

मैंने पहले से ही डीबग करने की कोशिश की है> प्रक्रिया को अटैच करने के लिए संलग्न करें और हैंडल के अंदर ब्रेकपॉइंट डालें। वॉचकिट एक्स्टेंशनरक्वैस्ट विधि यह पुष्टि करने के लिए कि इसे कहलाया गया है और इसे नहीं कहा जाता है।

यहां प्रगति है, जब मैं घड़ी ऐप में बटन क्लिक करता हूं तो मैं ओपनपेरेंट एप्लिकेशन को कॉल करता हूं।

@IBAction func viewOniPhoneAction() { 


    let userInfo: [NSObject : AnyObject] = [ 
     "userID" : user.userID 
    ] 


    WKInterfaceController.openParentApplication(userInfo, reply: { (userInfo : [NSObject : AnyObject]!, error : NSError!) -> Void in 

    }) 

} 

यहाँ मेरी एप्लिकेशन delegeate

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply 
{ 
NSDictionary *replyDict = @{@"response": @"done"}; 
reply(replyDict); 
} 

मैं handleWatchKitExtensionRequest में reply() कोशिश की, लेकिन मैं घड़ी app से जबाब ब्लॉक में यह त्रुटि आई है जब आप खोलने

Error Error Domain=com.apple.watchkit.errors Code=2 "The UIApplicationDelegate in the iPhone App never called reply() in -[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]" UserInfo=0x60800026e0c0 {NSLocalizedDescription=The UIApplicationDelegate in the iPhone App never called reply() in -[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]} 
+0

नहीं, मैं पहले से ही है कि एक करने की कोशिश की:

[WKInterfaceController openParentApplication:loadDetailChatDataDictionary reply:^(NSDictionary *replyInfo, NSError *error) { 

यहाँ मेरी एप्लिकेशन प्रतिनिधि है। मेरा मानना ​​है कि समस्या हैडल WatchKitExtensionRequest में पृष्ठभूमि कार्य शुरू करने के लिए, विधि को कॉल किया जाना चाहिए। ताकि विधि के अंदर कोड निष्पादित किया जा सके। ऐसा लगता है कि विधि को भी बुलाया नहीं जाता है। – cloudy45man

+0

क्या आपने यह कोशिश की है? http://stackoverflow.com/questions/28112445/handlewatchkitextensionrequest-not-responding-to-openparentapplication-in-watchk – vomako

+0

हां, यह काम नहीं करता है। क्या कोई सेटिंग है जो मैं जांच सकता हूं कि अभिभावक ऐप और घड़ी ऐप सही तरीके से लिंक है या नहीं। – cloudy45man

उत्तर

0

handleWatchKitRequest नहीं बुलाया जाता है है एक यूआरएल योजना के माध्यम से ऐप। इसे केवल openParentApplication:reply: का उपयोग करके वॉचकिट एक्सटेंशन में किए गए अनुरोधों के जवाब में बुलाया जाता है। यही कारण है कि आप इसे निष्पादित नहीं कर रहे हैं।

+0

भ्रम के लिए खेद है, मैं जो चाहता हूं उसे प्राप्त करने के लिए दोनों विधियों का उपयोग करता हूं। मैं घड़ी ऐप के अंदर WKInterfaceController openapplication का उपयोग करता हूं और ऐप लॉन्च करने के लिए निम्न का उपयोग करता हूं। - (शून्य) आवेदन: (UIApplication *) आवेदन handleWatchKitExtensionRequest: (NSDictionary *) userInfo उत्तर: (शून्य (^) (NSDictionary *)) जबाब { [[UIApplication sharedApplication] openURL: [NSURL URLWithString: @ " हैंडलिंगवॉचकिटटेस्ट: // "]]; } – cloudy45man

0

आपको अपने माता-पिता के पास जवाब देने का समय सुनिश्चित करने के लिए पृष्ठभूमि जवाब में अपना उत्तर लपेटना होगा।

-

(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *replyInfo))reply{ 

    UIApplication *app = [UIApplication sharedApplication]; 

    UIBackgroundTaskIdentifier bgTask __block = [app beginBackgroundTaskWithName:@"watchAppRequest" expirationHandler:^{ 

     [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 

    }]; 

//make your calls here to your tasks, when finished, send the reply then terminate the background task 

//send reply back to watch 
reply(replyInfo); 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
     [app endBackgroundTask:bgTask]; 
     bgTask=UIBackgroundTaskInvalid; 
    }); 
} 
+0

मैंने आपके कोड की कोशिश की लेकिन अभी तक काम नहीं कर रहा है। – cloudy45man

2

मैं यह काम करने के लिए मिल गया है !!! एक ही समस्या होने के बाद ....

बस शुरू करें बैकग्राउंड टास्कविथ एक्सपेरेशन हैंडलर समय को एक बड़े मूल्य पर बढ़ाएं यदि आपको अभी भी डेटा नहीं मिलता है !!! मैंने पहले 2 सेकेंड का इस्तेमाल किया लेकिन मेरा नेटवर्क भी कमजोर है !!!

मैं openParentApplication फोन जब एक बटन घड़ी अनुप्रयोग में क्लिक किया जाता है:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply { 

    __block UIBackgroundTaskIdentifier bogusWorkaroundTask; 
    bogusWorkaroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     [[UIApplication sharedApplication] endBackgroundTask:bogusWorkaroundTask]; 
    }]; 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // increase the time to a larger value if you still don't get the data!!! I used 2 secs previously but my network is too weak!!! 
     [[UIApplication sharedApplication] endBackgroundTask:bogusWorkaroundTask]; 
    }); 
    // -------------------- 

    __block UIBackgroundTaskIdentifier realBackgroundTask; 
    realBackgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     reply(nil); 
     [[UIApplication sharedApplication] endBackgroundTask:realBackgroundTask]; 
    }]; 

    NSString *value = userInfo[@"key"]; 
    if ([value isEqualToString:@"loadRecentChatData"]) { 
       reply(@{@"recents":recents}); // Add your reply here 
    } 
+0

कहां समझा सकता है कि आपको इस बोगस वर्कराउंड टास्क की आवश्यकता क्यों है? मुझे स्पष्ट नहीं है कि आप इस पर समय क्यों बढ़ाते हैं, न कि वास्तविक बैकगोरंड टास्क पर ... – blackbox

+1

@ ब्लैकबॉक्स बोगस वर्कअराउंड कार्य यहां एक समस्या को हल करने के लिए है, कभी-कभी ऐप्पल ऐप को मार रहा था, भले ही आपने पहले से ही पृष्ठभूमि कार्य शुरू कर दिया हो। किसी कारण से, तुरंत एक फर्जी कार्य शुरू करना और कुछ सेकेंड के बाद इसे बंद करना वास्तविक हैंडलर कोड को समय-समय पर कटऑफ होने से पहले अपना खुद का पृष्ठभूमि कार्य स्थापित करने की अनुमति देता है। यह समाधान मेरे लिए भी काम करता था, हालांकि मुझे लगता है कि 'एप्लिकेशन: हैंडलवैचकिट एक्स्टेंशन रिक्वेस्ट: उत्तर: कई अनुरोध किए जाने के बाद कॉल किया जाना बंद हो गया है और डिवाइस लॉक है। –

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