コードを繰り返し書くことを避けるために、他のクラスのすべてのHTTP接続作業を処理するクラスを作成したいと思います。 私は(NSObjectのサブクラスの)ConnectionCenterそれを呼び出すと、それに次のコードを追加します。特別なクラスでHTTP接続を設定する方法は?
-(void)connect:(NSString *)strURL obj:(ConnectCenter *)objConnect
{
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:strURL]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:objConnect];
if (theConnection)
{
// receivedData is declared as a method instance elsewhere
receivedData = [[NSMutableData data] retain];
}
else
{
// inform the user that the download could not be made
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// append the new data to the receivedData
// receivedData is declared as a method instance elsewhere
[receivedData appendData:data];
}
そして、他のクラスはURLとConnectionCenterのオブジェクトを渡すことによってそれを呼び出します。しかし、ConnectionCenterのメソッドdidReceiveDataは呼び出されません。何が問題なのか?
なぜ接続しますか:メソッドは2番目の引数でConnectionCenterを受け入れますか?接続を開始する前にreceivedDataを作成します。これはConnectionCenterの方法ではありませんか?もしそうなら、それは通常の方法( '' self'')で自分自身を参照できるだけで、なぜオブジェクトをそれ自身に渡していますか? –
通常の方法で「自己」が機能しないので、私はこの変更を行います。これがまだうまくいかなければ、私は元に戻ってきます。 –
ありがとうございます。私はデリゲートを「自己」に戻し、それが機能します。 –