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

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

Вот мой полный собственный класс для создания 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, и я не понимаю, почему на самом деле... Есть идеи? Заранее большое спасибо!


person Silvering    schedule 06.09.2018    source источник


Ответы (1)


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

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

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

person idrougge    schedule 07.09.2018