web-dev-qa-db-ja.com

タイプ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」に準拠していません。

何か案は?

20
emoleumassi

継承チェーンをフォローアップすると、NSURLSessionDataDelegateNSURLSessionTaskDelegateを継承し、NSURLSessionDelegateは継承し、NSObjectProtocolを継承します。このプロトコルには、クラスで実装されていないisEqual(_:)respondsToSelector(_:)などのさまざまな必須メソッドがあります。

一般に、ここで行うことは、クラスにNSObjectに準拠するNSObjectProtocolを継承させることです。

class Test: NSObject, NSURLSessionDataDelegate {
    ...
}
32
Brian Nickel

NSObjectNSOBjectと間違えたときにこのエラーが発生しました。これは、タイプを間違えると、技術的にNSObjectに準拠していないためです。それが誰かを助けることを願っています。

0
ScottyBlades

クラスをプロトコルFBSDKSharingDelegateに準拠させようとしましたが、同じエラーが発生しました。スーパークラスUIViewを使用してサブクラスをプロトコルに準拠させようとすると、エラーはなくなりました。

0
J. Doe