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

キャストはオブジェクトのクラスを変更しません。キャストは、コンパイラに「このオブジェクトは実際には何でもあります」と伝えるだけです。これは、コンパイラが何かのクラスを誤解している場合のためです。

キャストが機能していないように見える場合は、カスタム サブクラスのインスタンスが渡されていないことを意味します。したがって、最初に接続を作成するコードを見る必要があります。私は次のようなものを見ることを期待しています:

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

それはあなたのコードがどのように見えるかです? そうでない場合 (つまり、NSURLConnectionではなくを作成する場合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 内に 10 個ほどの URLRequest を持つことができます。

于 2013-01-08T17:51:44.010 に答える