2016-01-06 20 views
9

Non capisco perché il mio codice non funzioni. Eccolo:Tipo CCC non conforme al protocollo '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() 

    } 
} 

E l'errore:

Type Test does not conform to protocol 'NSObjectProtocol'.

Tutte le idee?

risposta

21

Se si segue la catena di ereditarietà, NSURLSessionDataDelegate eredita NSURLSessionTaskDelegate, che eredita NSURLSessionDelegate, che eredita, NSObjectProtocol. Questo protocollo ha vari metodi richiesti come isEqual(_:) e respondsToSelector(_:) che la classe non implementa.

In generale quello che si potrebbe fare qui è rendere la vostra classe eredita NSObject conforme alle NSObjectProtocol:

class Test: NSObject, NSURLSessionDataDelegate { 
    ... 
}
0

ho cercato di fare la mia classe conforme al protocollo FBSDKSharingDelegate e ottenuto lo stesso errore. Quando ho provato a rendere la mia sottoclasse con la superclasse UIView conforme al protocollo, l'errore è andato via.

Problemi correlati