Вызов методов делегата из расширения бросает ноль, но работает на событие действия - PullRequest
0 голосов
/ 06 июля 2019

Ниже приведен фрагмент кода, delegate никогда не вызывает, когда периодически вызывается XMPPStreamDelegate метод.Служба присутствия delegate выбрасывает nil внутри расширения, но дает значение при вызове какого-либо действия из другого контроллера представления.

public protocol PresenceServiceDelegate{
    func didPresenceReceive()
}

class PresenceService: NSObject{ 
    var delegate: PresenceServiceDelegate?

    public override init()
        delegate = self
     }
}

extension PresenceService: XMPPStreamDelegate {

    public func didReceive presence() // XMPPStrem delegate

        // My Presence Service delegate not at all calling (delegate throws nil )
        delegate?.didPresenceReceive()
    }
}


class ViewController: UIViewController{
    var presence = PresenceService()

    func viewDidLoad() {
        presence.delegate = self
    }
}

extension ViewController: PresenceServiceDelegate {
    public func didPresenceReceive(){
        print("test")
    }
}

1 Ответ

0 голосов
/ 07 июля 2019

Код ниже работает нормально, как и ожидалось.Во время вызовов XMPPStreamDelegate объект делегатаsenceservice выбрасывает nill и не распознается, здесь приведенный ниже код вызывает экземпляр классаsenceservice, который включает свой собственный экземпляр делегата и запускает значение для контроллера представления, как и ожидалось.

class PresenceService: NSObject{ 
    var delegate: PresenceServiceDelegate?

     public override init()
        delegate = self
     }

    // Singleton instance
    public class var sharedInstance : PresenceService {
        struct PresenceServiceInstance {
            static let instance = PresenceService()
        }
        return PresenceServiceInstance.instance
    }
}

extension PresenceService: XMPPStreamDelegate {

    public func didReceive presence() // XMPPStrem delegate

        // My Presence Service delegate not at all calling (delegate throws nil )
        PresenceServiceInstance.sharedInstance.delegate?.didPresenceReceive()
    }
}
...