Тип CCC не соответствует протоколу NSObjectProtocol,

Я не понимаю, почему мой код не работает. Вот он:

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":"[email protected]",
            .....
        ]

        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.

Любые идеи?

Ответ 1

Если вы следуете цепочке наследования, NSURLSessionDataDelegate наследует NSURLSessionTaskDelegate, который наследует NSURLSessionDelegate, который наследует, NSObjectProtocol. Этот протокол имеет различные требуемые методы, такие как isEqual(_:) и respondsToSelector(_:), которые ваш класс не реализует.

Как правило, вы должны сделать свой класс наследуемым NSObject, который соответствует NSObjectProtocol:

class Test: NSObject, NSURLSessionDataDelegate {
    ...
}

Ответ 2

Я попытался сделать свой класс совместимым с протоколом FBSDKSharingDelegate и получил ту же ошибку. Когда я пытался сделать мой подкласс с суперклассом UIView совместимым с протоколом, ошибка исчезла.

Ответ 3

Я получил эту ошибку, когда неправильно набрал NSObject как NSOBject, потому что, если вы его неправильно напечатали, то он технически не соответствует NSObject. Надеюсь, что это помогает кому-то.