NSOutputStream 自 iOS 8.3 更新后停止工作

Posted

技术标签:

【中文标题】NSOutputStream 自 iOS 8.3 更新后停止工作【英文标题】:NSOutputStream stop working since iOS 8.3 update 【发布时间】:2015-02-19 16:06:14 【问题描述】:

为什么在下面的代码中class Test 不接收流事件:

class Test
    : NSObject
    , NSStreamDelegate

    // NSStreamDelegate
    func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) 
        // this was never called
    

    override init() 
        super.init()

        let filePath = /*[some valid file path]*/
        if let stream = NSOutputStream(toFileAtPath: filePath, append: false) 
            stream.delegate = self
            stream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) // I've also tried replacing currentRunLoop with mainRunLoop just in case the result was the same
            stream.open()
            _stream = stream

            println("Stream opened \(_stream!.hasSpaceAvailable) \(_stream!.streamStatus.rawValue) \(_stream!.streamError)") // here hasSpaceAvailable is true, stream status is opened and error is nil
        

    

    deinit 
        _stream!.close()
    

    func write() 
        if (_stream!.hasSpaceAvailable) 
            let data = NSMutableData(length: 10000)
            _stream!.write(UnsafePointer<UInt8>(data!.bytes), maxLength: data!.length)
        
    

    var _stream: NSOutputStream?

该类没有被破坏(我将它作为 ViewController 成员)。难道我做错了什么?我在代码中找不到问题,并且在 ios 8.3、XCode 6.3 发行说明中找不到与我的问题相关的任何内容。我没有在 Objective-C 上尝试过,但很可能会出现同样的问题。

我们非常感谢您的帮助!

【问题讨论】:

建议你用 Obj-C 编写,验证是否有问题,如果有问题,将错误报告发送到 bugreport.apple.com。 8.3 是一个测试版 【参考方案1】:

我解决了这个问题,我已经将类设为私有,我猜是因为我设置为流的委托,调用功能看不到它,只是不调用它。

【讨论】:

谢谢!我有同样的问题。在 XCode 6.2 中工作,然后在 6.3 中突然停止工作。

以上是关于NSOutputStream 自 iOS 8.3 更新后停止工作的主要内容,如果未能解决你的问题,请参考以下文章

iOS之通过NSOutputStream大文件下载

iOS:用于大文件下载的 NSFileHandle 与 NSOutputStream

无法调配 NSOutputStream 的 write:MaxLength:

写入后 NSOutputStream 因访问错误而崩溃(Objective-c)

使用 NSOutputstream 有啥好处?

通过 NSInputStream 和 NSOutputStream 进行视频流