コードが機能しない理由がわかりません。ここにあります:
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」に準拠していません。
何か案は?
継承チェーンをフォローアップすると、NSURLSessionDataDelegate
はNSURLSessionTaskDelegate
を継承し、NSURLSessionDelegate
は継承し、NSObjectProtocol
を継承します。このプロトコルには、クラスで実装されていないisEqual(_:)
やrespondsToSelector(_:)
などのさまざまな必須メソッドがあります。
一般に、ここで行うことは、クラスにNSObject
に準拠するNSObjectProtocol
を継承させることです。
class Test: NSObject, NSURLSessionDataDelegate {
...
}
NSObject
をNSOBject
と間違えたときにこのエラーが発生しました。これは、タイプを間違えると、技術的にNSObject
に準拠していないためです。それが誰かを助けることを願っています。
クラスをプロトコルFBSDKSharingDelegate
に準拠させようとしましたが、同じエラーが発生しました。スーパークラスUIView
を使用してサブクラスをプロトコルに準拠させようとすると、エラーはなくなりました。