Swift:当NSErrorPointer始终为nil时传递NSError

时间:2014-11-07 23:12:12

标签: ios swift nserror

我正在尝试实施错误处理,如“错误报告”中所述。 Apple的Swift Docs部分(https://developer.apple.com/library/mac/documentation/swift/conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html),但我必须遗漏一些东西。

我有下面的代码(简化),即使网络请求明显失败(我与互联网断开连接," ERROR"被打印),我作为指针传递的错误变量总是在完工区内没有......

我做错了什么?谢谢!

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()        
}

1 个答案:

答案 0 :(得分:0)

<强>解决方案

您将在Apple的免费电子书中找到一个明确的Swift错误处理示例,题为“使用Swift with Cocoa和Objective-C”(第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