【问题标题】:Swift: NSError passed as NSErrorPointer is always nilSwift:作为 NSErrorPointer 传递的 NSError 始终为零
【发布时间】:2014-11-07 23:12:12
【问题描述】:

我正在尝试按照 Apple 的 Swift 文档 (https://developer.apple.com/library/mac/documentation/swift/conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html) 的“错误报告”部分中的说明实施错误处理,但我一定遗漏了一些东西。

我有下面的代码(简化),即使网络请求明显失败(我与互联网断开连接,并且打印了“错误”),我作为指针传递的错误变量在完成块内总是为零...

我做错了什么?谢谢!

override func viewDidLoad() {

    super.viewDidLoad()

    var error: NSError?

    // THIS IS ACTUALLY IN ANOTHER CLASS,
    // BUT EVEN IF PLACED IN THE SAME CLASS I STILL GET THE SAME PROBLEM
    doStuff({ (result) -> Void in

        println("\(error)") // THIS PRINTS NIL

    }, errorPointer: &error)        
}

func doStuff(completion: (result:SomeType) -> Void, errorPointer: NSErrorPointer) {

    // SETUP CODE NOT INCLUDED

    let downloadTask = manager.downloadTaskWithRequest(req, progress: nil, destination: { (url, response) -> NSURL! in

        return destinationURL

    }) { (response, url, error) -> Void in

        // CREATE RESULT

        if(error != nil && errorPointer != nil) {
            println(“ERROR”) // THIS GETS PRINTED
            errorPointer.memory = error // ALSO TRIED NSError(...)
        }
        completion(result)
    }
    downloadTask.resume()        
}

【问题讨论】:

    标签: ios swift nserror


    【解决方案1】:

    解决方案

    您将在 Apple 的免费电子书《Using Swift with Cocoa and Objective-C》中找到一个清晰的 Swift 错误处理示例(第 51 页)。

    var writeError: NSError?
    let written = myString.writeToFile(path, atomically: false,
        encoding: NSUTF8StringEncoding,
        error: &writeError)
    if !written {
        if let error = writeError {
            println("write failure: \(error.localizedDescription)")
        }
    }
    
    Excerpt From: Apple Inc. “Using Swift with Cocoa and Objective-C.” iBooks. https://itun.es/us/1u3-0.l
    

    基本上,您想查看错误的内存地址,然后测试该值以处理错误。尝试据此推断并重写代码以获得有效结果。

    此外,如果您必须使用 NSErrorPointer,请参阅以下SO question and answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2017-10-06
      • 2019-09-21
      • 2016-05-02
      • 2012-01-16
      • 2020-01-07
      相关资源
      最近更新 更多