类型CCC不符合协议“NSObjectProtocol”的要求。

27

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

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

    }
}

还有这个错误:

Type Test does not conform to protocol 'NSObjectProtocol'。

有什么想法吗?

3个回答

45
如果您跟随继承链,NSURLSessionDataDelegate继承了NSURLSessionTaskDelegate,后者又继承了NSURLSessionDelegate,最后继承了NSObjectProtocol。这个协议有许多必需的方法,例如isEqual(_:)respondsToSelector(_:),而您的类没有实现这些方法。
通常情况下,您需要使您的类继承NSObject,它符合NSObjectProtocol
class Test: <strong>NSObject</strong>, NSURLSessionDataDelegate {
    ...
}

1
当我将NSObject错写成NSOBject时,出现了这个错误,因为如果你拼错了,它就不能符合NSObject的规范。希望这能帮到某些人。

0

我试图让我的类符合协议FBSDKSharingDelegate,但是得到了相同的错误。当我尝试让我的子类与超类UIView符合协议时,错误消失了。


1
这是因为 UIView 已经通过 UIResponder 继承了 NSObject - Kenster999

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接