【问题标题】:Subclassing NSInputStream, overriding delegate?子类化 NSInputStream,覆盖委托?
【发布时间】:2016-07-19 13:15:41
【问题描述】:

我创建了一个 NSInputStream 子类,但是当它读取实际数据时,我得到了以下异常。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -setDelegate: only defined for abstract class.  Define -[EventusCore.FileUploadStream setDelegate:]!'

我无法覆盖 NSStream 抽象类的以下属性:

unowned(unsafe) public var delegate: NSStreamDelegate?

这是我继承自 NSInputStream 的类

class InputStream : NSInputStream {

    private var currentStatus: NSStreamStatus  = .Closed

//    override var delegate: NSStreamDelegate?

    weak var delegate: NSStreamDelegate?

    override func open() {
        self.currentStatus = .Open
    }

    override func close() {
        self.currentStatus = .Closed
    }

    override var streamStatus: NSStreamStatus {
        return self.currentStatus
    }

    override var hasBytesAvailable: Bool {
        return self.currentStatus == .Open
    }

    // MARK: NSInputStream and CFReadStream abstract method overrides

    override func scheduleInRunLoop(aRunLoop: NSRunLoop, forMode mode: String) {

    }

    override func removeFromRunLoop(aRunLoop: NSRunLoop, forMode mode: String) {

    }

}

这是我得到的错误:

我做错了什么?使用 Swift 是否有可能?

【问题讨论】:

标签: ios swift delegates subclass nsinputstream


【解决方案1】:

找到了覆盖委托变量的合适方法

var localdelegate: NSStreamDelegate?

override var delegate: NSStreamDelegate? {
    set {
        self.localdelegate = newValue
    }
    get {
        return self.localdelegate
    }
}

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 2015-06-26
    • 2015-10-28
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多