我正在研究NSURLConnection的子类。我添加了一些属性和功能。我实现了NSURLConnectionDelegate及其方法。
现在我需要将NSURLConnection(及其属性)传递给我的子类委托。我为此实现了委托协议。
这是一个代码示例:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if([_delegate respondsToSelector:_didReceiveDataSelector]) {
[_delegate performSelector:_didReceiveDataSelector withObject:connection];
}
现在我还需要返回我的子类属性。我试图简单地转换实例:
mySubClass *obj = (mySubClass *)connection;
obj.userInfo = self.userInfo;
但事实证明(NSLog(@"%@", NSStringFromClass([obj class]));
)演员表会返回一个对象,该对象的类仍为NSURLConnection。
现在我想知道如何合并超类实例和我的子类属性的所有属性值。
感谢您的帮助!
答案 0 :(得分:5)
转换不会更改对象的类。转换只是告诉编译器“这个对象实际上是一个什么”。这是因为编译器误解了什么类是什么。
鉴于转换似乎不适合您,那么这意味着您没有被传递自定义子类的实例。因此,您应该首先查看创建连接的代码。我希望看到类似的东西:
mySubClass *conn = [[mySubClass alloc] initWithRequest:req delegate:self];
这是你的代码是什么样的?如果不是(例如,如果您创建NSURLConnection
而不是mySubClass
),请切换为创建mySubClass
。
答案 1 :(得分:0)
我解决了这个问题。
现在我正在这样做:
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate {
self = [super initWithRequest:request delegate:self];
if(self) {
_delegate = delegate;
}
}
这样我就可以在子类上接收委托方法,扩展方法中的信息并将自定义选择器结束到委托。
在viewControllers中,我可以这样做:
mySubClass *con = [[mySubClass alloc] initWithRequest:req delegate:self];
[con setDidReceiveResponseSelector:@selector(connection:didGetResponse)];
[con start];
所以我可以在同一个viewController中使用不同的委托方法进行相同操作的10个URLRequests。