デリゲートが何をしているのか、なぜそれを使用するのか、それをどのように実装するのか、まともな考えがあり、私は自分のプロジェクトの1つでそれを実装しようとしています。私が解決しようとしている問題は、Controllerオブジェクトをネットワークアクセスクラスから切り離すことです。この文脈では、アイデアは私の頭の中で少し乱雑になります。Objective-Cの代理人クエリ
NetworkAccessClassがControllerオブジェクトのヘルパーとして機能しているため、NetworkAccessClassがControllerオブジェクトのデリゲートである必要があります。以下は明らかにそれを行うための正しい方法であるので、しかし、逆の方法で動作するようです:私のFirstViewController.h
NetworkaccessClass.h
@protocol NetworkAccessDelegate
-(void) requestSucceded:(NSData *) data
-(void) requestFailed:(int) responseCode;
@end
@interface NetworkAccessClass : NSObject
{
id<NetworkAccessDelegate> networkDelegate;
}
@property(nonatomic, assign) id networkDelegate;
-(void) initWithDelegate:(id) delegate; //
@end
NetworkAccessClass.m
@implementation
@synthesize networkDelegate
-(void) initWithParams:(id) delegate
{
networkDelegate = delegate;
// Assign GET/POST vals, create request etc
[request startAsynchronous];
}
-(void) requestSucceded:(ASIHTTPRequest *) request
{
if([networkDelegate respondsToSelector:@selector(requestSucceded:)]) {
// Send the data to the controller object for it to use
...
}
}
-(void) requestFailed:(ASIHTTPRequest *) request
{
// Same as above. Send to request failed.
}
@end
そして最後に
#import "NetworkAccessClass.h"
@interface FirstViewController<NetworkAccessDelegate>
{
}
-(void) requestSucceded:(NSData *) data;
-(void) requestFailed:(int) responseCode;
@end
SecondViewController.h
など。
これは私のネットワーククラスからの私のコントローラを分離していますが、私はこの場合のコントローラは、他の方法ラウンド代表者やヘルパーメソッドへのネットワーククラスとして機能していないので、それは間違っだと感じざるを得ません。私は何か基本的なものを欠いていますそれともこれはどうですか?
ありがとう、
Teja。
ええと私は理論を得ていますが、あなたが英語の言葉で見れば、タスクを誰かに割り当てているだけです。ヘルパーメソッドのようなもので、混乱の原因になります。あなたが提供したアナロジーは役に立ちます。 –
例のように、結果が関心のある場所にローカルで処理された結果、コア "作業をしていること"がUIViewのどこを知る必要はありませんデータを入れてください。デリゲートパターンは完全なデカップリングを可能にします。プロセスを実行するものは、その結果の処理を、その結果が使用されたい場所に近いオブジェクトに「委譲」(動詞)します。 –