0

我正在研究 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。

现在我想知道如何合并超类实例的所有属性值和我的子类属性。

感谢帮助!

4

2 回答 2

5

强制转换不会改变对象的类。铸造只是告诉编译器“这个对象实际上是一个whatever”。这是因为编译器误解了什么是类。

鉴于强制转换似乎对您不起作用,那么这意味着您没有被传递自定义子类的实例。因此,您应该首先查看创建连接的代码。我希望看到类似的东西:

mySubClass *conn = [[mySubClass alloc] initWithRequest:req delegate:self];

你的代码是这样的吗?如果不是(即,如果您创建一个NSURLConnection而不是 a mySubClass),则切换到创建一个mySubClass.

于 2013-01-07T16:10:19.040 回答
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 中有十个 URLRequests,对于同一个动作有不同的委托方法。

于 2013-01-08T17:51:44.010 回答