2015-10-08 3 views
10

में गैर-समर्थित फ्रेमवर्क का संदर्भ कैसे लें मैंने अपने ऐप को नवीनतम स्विफ्ट 2.0 सिंटैक्स में अपडेट किया। ऐसा करने में, मेरा वॉचकिट ऐप टूट गया है। मुद्दा यह है कि वॉचकिट ऐप एक वर्ग का संदर्भ देता है जो फ्रेमवर्क AVFoundation का संदर्भ देता है। WatchOS2 जाहिरा तौर पर अब नहीं रह गया है मानक चौखटे में से कुछ का समर्थन करता है: संजाल आधारित कार्यों के लिएवॉच ओएस 2

समर्थन निम्नलिखित प्रौद्योगिकियों में शामिल हैं:

WatchKit एक्सटेंशन एक NSURLSession वस्तु के माध्यम से सीधे नेटवर्क पहुँच सकते हैं। वॉचकिट एक्सटेंशन में NSURLSession क्षमताओं तक पूर्ण पहुंच है, जिसमें पृष्ठभूमि में फ़ाइलों को डाउनलोड करने की क्षमता शामिल है। इस वर्ग का उपयोग करने के तरीके के बारे में जानकारी के लिए, यूआरएल सिस्टम सिस्टमिंग गाइड लोड हो रहा है। वॉच कनेक्टिविटी फ्रेमवर्क आपके वॉच ऐप और आईओएस ऐप के बीच बिडरेक्शनल संचार का समर्थन करता है। दो ऐप्स के बीच गतिविधियों को समन्वयित करने के लिए इस ढांचे का उपयोग करें। अपने सहयोगी आईओएस ऐप के साथ संचार देखें।

Available System Technologies for WatchKit

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

मुझे क्या करना कोशिश कर रहा हूँ निम्नलिखित, मेरे InterfaceController में है:

override func willActivate() { 
    super.willActivate() 

    let defaultsShared = NSUserDefaults(suiteName: "somesharedappgroup") 
    let defaults = NSUserDefaults.standardUserDefaults() 


    if let barcodeString = defaultsShared!.objectForKey("barcode") as? String { 
     if let barcodeContent = RSUnifiedCodeGenerator.shared.generateCode(barcodeString, machineReadableCodeObjectType: AVMetadataObjectTypeCode39Code) { 
      barcode.setImage(barcodeContent) 
      label.setText("ID: \(barcodeString)") 
     } else { 
      label.setText("Please setup extensions in the settings of SHPID.") 
      barcode.setImage(nil) 
     } 
    } else { 

     label.setText("Please setup extensions in the settings of SHPID.") 
     barcode.setImage(nil) 

    } 
} 

RSUnifiedCodeGenerator एक वर्ग है कि AVFoundation के इस्तेमाल तार से बारकोड छवियों उत्पन्न करने के लिए किया जा रहा है। इसके अलावा, जेनरेटर जो प्रकार लेता है वह एक AVObject है: AVMetadataObjectTypeCode39Code। इस समाधान ने पहले वॉचोज़ में अच्छी तरह से काम किया, लेकिन अब ओएस 2 में टूटा हुआ है। मुझे लगता है कि वॉच कनेक्टिविटी एक समाधान हो सकता है, और क्या उसने मुझे फोन से बारकोड पास कर दिया है, लेकिन इसके लिए मुझे आईओएस 8 का समर्थन करना बंद करना होगा। वॉचोज़ 2 के साथ एवीएफउंडेशन का उपयोग करने के लिए सबसे अच्छा समाधान है, यदि कोई है, तो अगर मैं ऐसा नहीं कर सकता, तो मुझे फोन से घड़ी पर इस छवि को देखने के लिए और कैसे जाना चाहिए। धन्यवाद।

उत्तर

4

यह एक उदाहरण है कि आप अपने ऐप के लिए वॉचकनेक्टिविटी का उपयोग कैसे कर सकते हैं।

कृपया यह नहीं कि यह उदाहरण किसी न किसी है और त्रुटि को संभाल नहीं करता है। सत्र प्रबंधन को स्थिर उत्पाद के लिए भी कुछ ध्यान देना चाहिए।

enter image description here

iPhone AppDelegate

import UIKit 
import WatchConnectivity 
import AVFoundation 
import RSBarcodes 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    // Override point for customization after application launch. 

    if WCSession.isSupported() { 
     let session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 
    } 

    return true 
    } 

    // On Watch sends the message. 
    // Will not reply as we will push a data message with image. 
    func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { 
    if "generateBarcode" == message["id"] as! String { 
     let code = message["code"] as! String 
     let barcodeImage = RSUnifiedCodeGenerator.shared.generateCode(code, 
     machineReadableCodeObjectType: AVMetadataObjectTypeCode39Code)! 

     if WCSession.isSupported() { 
     let session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 

     session.sendMessageData(UIImagePNGRepresentation(barcodeImage)!, 
      replyHandler: nil, errorHandler: nil) 
     } 
    } 
    } 
} 

घड़ी InterfaceController

import WatchKit 
import Foundation 
import WatchConnectivity 

class InterfaceController: WKInterfaceController, WCSessionDelegate { 

    @IBOutlet var barcodeImage: WKInterfaceImage! 

    override func willActivate() { 
    super.willActivate() 

    if WCSession.isSupported() { 
     let session = WCSession.defaultSession() 
     session.delegate = self 
     session.activateSession() 

     // Send a message requesting a barcode image 
     session.sendMessage(
     ["id": "generateBarcode", "code": "2166529V"], 
     replyHandler: nil, // Do not handle response, iPhone will push a data message 
     errorHandler: nil) 
    } 
    } 

    // On iPhone pushes a data message 
    func session(session: WCSession, didReceiveMessageData messageData: NSData) { 
    barcodeImage.setImage(UIImage(data: messageData)) 
    } 
} 
1

मुझे लगता है कि वॉच कनेक्टिविटी का उपयोग करना सही काम है। पिछले संस्करण समर्थन के लिए यदि एकमात्र डीलर ब्रेकर AVMetadataObjectTypeCode39Code है, तो आप इसका मूल्य प्रिंट कर सकते हैं और इसे सीधे फ़ंक्शन पर भेज सकते हैं?

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