23

我不明白为什么我的代码不起作用。这里是:

class Test: NSURLSessionDataDelegate {

    func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {

        if(error == nil) {
            print("Hallo")
        } else {
            print(error?.userInfo)
        }
    }

    func createRequest() {

        let dictionary = [
            "mailAddress":"foo@example.com",
            .....
        ]

        let nsData: NSData?
        do {
            nsData = try NSJSONSerialization.dataWithJSONObject(dictionary, options: NSJSONWritingOptions(rawValue:0))
        } catch _ {
            nsData = nil
        }

        let defaultConfigObject = NSURLSessionConfiguration.defaultSessionConfiguration()
        let defaultSession = NSURLSession(configuration: defaultConfigObject, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
        let url = NSURL(string: "http:...")!
        let urlRequest = NSMutableURLRequest(URL: url)
        urlRequest.HTTPMethod = "POST"
        urlRequest.HTTPBody = nsData
        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
        let dataTask = defaultSession.dataTaskWithRequest(urlRequest)
        dataTask.resume()

    }
}

和错误:

类型测试不符合协议“NSObjectProtocol”。

有任何想法吗?

4

3 回答 3

41

如果跟进继承链,NSURLSessionDataDelegate继承NSURLSessionTaskDelegate,继承NSURLSessionDelegate,继承,NSObjectProtocol。该协议具有各种必需的方法isEqual(_:),例如respondsToSelector(_:)您的类未实现的方法。

通常你会在这里做的是让你的类继承NSObject符合NSObjectProtocol

class Test: NSObject, NSURLSessionDataDelegate {
    ...
}
于 2016-01-06T17:03:29.887 回答
0

当我输入错误NSObject为时出现此错误NSOBject,因为如果您输入错误,那么它在技术上不符合NSObject. 希望对某人有所帮助。

于 2019-09-19T07:47:37.147 回答
0

I tried to make my class conform to protocol FBSDKSharingDelegate and got the same error. When I tried to make my subclass with superclass UIView conform to the protocol, the error went away.

于 2017-12-01T16:26:31.043 回答