2015-10-08 20 views
10

Tôi đã cập nhật ứng dụng của mình lên cú pháp 2.0 nhanh nhất. Khi làm như vậy, ứng dụng watchkit của tôi đã bị hỏng. Vấn đề là ứng dụng watchkit tham chiếu đến một lớp tham chiếu đến khuôn khổ AVFoundation. WatchOS2 rõ ràng bây giờ không còn hỗ trợ một số trong những khuôn khổ tiêu chuẩn:Cách tham chiếu khung không được hỗ trợ trong Hệ điều hành đồng hồ 2

Hỗ trợ cho các hoạt động dựa trên mạng bao gồm các công nghệ sau:

mở rộng WatchKit thể truy cập mạng trực tiếp thông qua một đối tượng NSURLSession. Tiện ích WatchKit có toàn quyền truy cập vào các khả năng của NSURLSession , bao gồm khả năng tải xuống tệp trong nền. Để biết thông tin về cách sử dụng lớp này, hãy xem URL Tải Hướng dẫn lập trình hệ thống. Khung kết nối Đồng hồ hỗ trợ liên lạc hai chiều giữa ứng dụng Đồng hồ của bạn và ứng dụng iOS . Sử dụng khung này để điều phối hoạt động giữa hai ứng dụng. Xem Giao tiếp với Ứng dụng iOS đi kèm của bạn.

Available System Technologies for WatchKit

Vì vậy, bây giờ tôi không thể biên dịch mã bộ đồng hồ là "không có mô-đun như tìm thấy" là một thông báo lỗi khi cố gắng sử dụng khuôn khổ AVFoundation. Làm thế nào tôi có thể nhận được xung quanh này và tiếp tục tham khảo lớp và khuôn khổ trong ứng dụng xem táo của tôi. Tôi có nên liên lạc dữ liệu giữa điện thoại và đồng hồ không? Có cách nào để liên kết khung công tác với tiện ích mở rộng không?

Những gì tôi đang cố gắng làm là những điều sau đây, trong InterfaceController tôi:

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) 

    } 
} 

Các RSUnifiedCodeGenerator là một lớp học mà sử dụng AVFoundation để tạo ra hình ảnh mã vạch từ chuỗi. Hơn nữa, loại máy phát điện đó là AVObject: AVMetadataObjectTypeCode39Code. Giải pháp này làm việc tốt trong WatchOS đầu tiên, nhưng bây giờ vẫn bị hỏng trong OS 2. Tôi thấy rằng WatchConnectivity có thể là một giải pháp, và có nó chỉ cần vượt qua tôi mã vạch từ điện thoại, nhưng điều đó sẽ yêu cầu tôi ngừng hỗ trợ iOS 8. Điều gì là giải pháp tốt nhất, nếu có, để sử dụng AVFoundation với WatchOS 2. Nếu tôi không thể làm điều đó, làm thế nào khác tôi nên đi về việc chuyển hình ảnh này đến đồng hồ từ điện thoại khi được gọi. Cảm ơn.

Trả lời

4

Đây là ví dụ về cách bạn có thể sử dụng WatchConnectivity cho ứng dụng của mình.

Vui lòng không làm ví dụ này là thô và không xử lý lỗi. Quản lý phiên cũng nên thu hút sự chú ý của một sản phẩm ổn định.

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) 
     } 
    } 
    } 
} 

Xem 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

Tôi nghĩ rằng việc sử dụng WatchConnectivity là điều phải làm. Để được hỗ trợ phiên bản trước đó, nếu bộ ngắt đại lý duy nhất là AVMetadataObjectTypeCode39Code, có thể bạn có thể in giá trị của nó và chuyển trực tiếp đến chức năng này?

Các vấn đề liên quan