HMHomeManager возвращает ноль - PullRequest
       16

HMHomeManager возвращает ноль

0 голосов
/ 06 сентября 2018

Я создаю свой собственный "HouseKit" на основе HomeKit. Этот 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.

Вот мой полный класс для создания Дома:

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() возвращает ноль, и я не понимаю, почему на самом деле ... Есть идеи? Большое спасибо заранее!

1 Ответ

0 голосов
/ 07 сентября 2018

Из документации Apple:

Вы не создаете дома напрямую - вместо этого вы создаете их с addHome(withName:completionHandler:) метод HMHomeManager.

Ваш код скомпилируется, если ваш AIAHouse объект наследует от NSObject вместо HMHome.

...