簡體   English   中英

HMHomeManager 返回 nil

[英]HMHomeManager returning nil

我正在基於 HomeKit 創建我自己的“HouseKit”。 這個 api 將允許我非常快速地執行 homekit 操作,例如 light.on()。

按照我的解釋,然后在這里介紹我的問題,這是我的燈光管理公共課程的示例。 這工作正常。

public class AIALight: AIAEquipment {

    // MARK: - Initialization
    public init(kind: Kind, name: String) {
        super.init(.light, equipmentName: name)
    }

}

extension AIALight: AIAControllable {

    public enum Order: AIAOrder {

        // MARK: - Values
        case on
        case off

        var info: (Int) {
            switch self {
            case .on:
                return 1
            case .off:
                return 0
            }
        }
    }
}

然后創建一個光...

var myLight = AIALight(kind: .light, name: "Sdb1")

...並在需要時發送訂單:

self.myLight.set(.on, completion: nil)

好的,現在保持相同的想法,我希望能夠創建房屋和房間。 對於家庭 HMHomeManagerDelegate,當然還有 HMHomeManager。

這是我創建 Home 的完整類:

import Foundation
import HomeKit

public final class AIAHouse: HMHome, HMHomeManagerDelegate {

    public var house: HMHome!
    public let houseName: String

    public var manager: HMHomeManager? {
        didSet {
            self.manager?.delegate = self
        }
    }

    // MARK: - Initialization
    public init(houseName: String) {
        self.manager = nil
        self.houseName = houseName
    }

    public func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {

        //We browse HMHome to find CruzHouse already set via Home App on iOS
        for home in manager.homes as [HMHome]{
            if home.name == self.houseName{

                print("Found the expected home: \(self.houseName) 🏠")
                self.house = home

            }
            else {
                print("\(self.houseName) not found 🛑")
            }
        }


    }
}

然后在我的 ViewController 中:

var homeManager: HMHomeManager!
var myHome: AIAHouse!

override func viewDidLoad() {
        super.viewDidLoad()

        self.homeManager = HMHomeManager()

        self.myHome = AIAHouse(houseName: "MyHome")
        self.myHome.manager = HMHomeManager()

}

我的問題是self.myHome.manager = HMHomeManager()返回 nil,我不明白為什么真的......知道嗎? 非常感謝!

從蘋果文檔:

你不直接創建家園-相反,你建立他們與addHome(withName:completionHandler:)的方法HMHomeManager

如果您的AIAHouse對象繼承自NSObject而不是HMHome您的代碼將被編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM