2016-09-15 12 views
6

मैं सिर्फ स्विफ्ट 3 करने के लिए एक स्विफ्ट 2 एप्लिकेशन परिवर्तित की आवश्यकता है, मेरे कोड एक क्लास WCSessionDelegate के रूप में चिह्नित है Xcode 8.WCSessionDelegate: sessionDidBecomeInactive और sessionDidDeactivate अनुपलब्ध चिह्नित किया गया है, लेकिन

की परिवर्तित समारोह का उपयोग कर।

स्विफ्ट 2 में यह sessionDidBecomeInactive और sessionDidDeactivate विधियों के बिना संकलित किया गया।

अगर मैं स्विफ्ट 3 संस्करण संकलित करता हूं, तो संकलक शिकायत करता है कि मेरी कक्षा प्रोटोकॉल WCSessionDelegate के अनुरूप नहीं है, जो स्पष्ट रूप से सही है।
यह तो दोनों कार्यों के लिए स्टब्स सम्मिलित करने के लिए प्रदान करता है:

public func sessionDidBecomeInactive(_ session: WCSession) { } 
public func sessionDidDeactivate(_ session: WCSession) { } 

के बाद इन स्टब्स डाला जाता है, इन त्रुटियों को रिपोर्ट कर रहे हैं:

Cannot override 'sessionDidBecomeInactive' which has been marked unavailable 
Cannot override 'sessionDidDeactivate' which has been marked unavailable 

मैं इस समस्या का समाधान कैसे कर सकते हैं?

+0

कक्षा को देखना चाहिए जहां आपने 'निष्क्रिय' और 'निष्क्रिय' कॉलबैक जोड़ा था; क्या यह आईओएस ऐप और वॉचकिट एक्सटेंशन दोनों के लिए संकलित और उपयोग किया जाता है? – ccjensen

+0

@ccjensen: हाँ, यह कक्षा साझा की जाती है। –

+0

@ccjensen: समस्या तब भी मौजूद है, यदि कक्षा में लक्ष्य के रूप में केवल घड़ी एक्सटेंशन है। –

उत्तर

19

क्योंकि प्रतिनिधियों के तरीके sessionDidDeactivate और sessionDidBecomeInactive को घड़ीओएस पर अनुपलब्ध के रूप में चिह्नित किया गया है, तो आप कंपाइलर को साझा कक्षा में कोड के उन टुकड़ों को अनदेखा कर देंगे। आप निम्न पूर्वप्रक्रमक मैक्रो का उपयोग कर सकते हैं:

#if os(iOS) 
public func sessionDidBecomeInactive(_ session: WCSession) { } 
public func sessionDidDeactivate(_ session: WCSession) { 
    session.activate() 
} 
#endif 

कृपया ध्यान दें मैं sessionDidDeactivate कॉल में activate कॉल गयी। यह फोन पर सत्र को दोबारा सक्रिय करने के लिए है जब उपयोगकर्ता ने एक जोड़ा घड़ी से दूसरे जोड़े में स्विच किया है। इस तरह इसे कॉल करने से यह माना जाता है कि आपके कोड का कोई अन्य थ्रेड/हिस्सा नहीं है जिसे स्विच होने से पहले समय दिया जाना चाहिए। त्वरित घड़ी स्विचिंग का समर्थन करने के बारे में अधिक जानकारी के लिए आपको ऐप्पल sample code

+0

आपके प्रयासों के लिए धन्यवाद, लेकिन सुझाए गए कोड सुधारों ने संकलक त्रुटियों को खत्म नहीं किया है, मुझे ऊपर संपादित करें देखें। –

+0

मैंने अपना जवाब अपडेट कर दिया है। कृपया इसे – ccjensen

+0

ग्रेट दें! यह काम करता हैं! धन्यवाद। –

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

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