在最新的XCode 6 beta(5)中,我注意到我的应用程序中几乎每个类都抱怨错误:
Class does not implement its superclass's required members
例如:
import UIKit
let _sharedAPIManager = APIManager(baseURL: NSURL.URLWithString(API_URL))
class APIManager: AFHTTPSessionManager {
class var sharedInstance : APIManager {
return _sharedAPIManager
}
// this fixes compiler error but why it should be here?
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override init() {
super.init()
}
override init(baseURL url: NSURL!) {
super.init(baseURL: url)
self.responseSerializer = AFJSONResponseSerializer()
self.requestSerializer = AFJSONRequestSerializer()
self.requestSerializer.setValue(API_KEY, forHTTPHeaderField: "X-Api-Key")
self.requestSerializer.setValue("3", forHTTPHeaderField: "X-Api-Version")
}
override init(baseURL url: NSURL!, sessionConfiguration configuration: NSURLSessionConfiguration!) {
super.init(baseURL: url, sessionConfiguration: configuration)
}
问题是为什么它甚至在AFNetworking的AFHTTPSessionManager的子类化中也是相关的?我错过了什么吗?
答案 0 :(得分:6)
因为AFHTTPSessionManager
符合NSCoding
并且initWithCoder:
是必需的。来自手册:
initWithCoder:返回从给定数据初始化的对象 取档。 (所需的)
答案 1 :(得分:6)
因为您的类会覆盖某些超类的指定初始值设定项,所以它不会自动从超类继承初始值设定项。如果你没有覆盖任何初始化器,那么超类中的所有初始化器都将被自动继承,因此将满足NSCoding所需的初始化器。