Итак, у меня есть хорошее представление о том, что делает делегат, зачем его использовать, как его реализовать и т. Д., И я работаю над его внедрением в одном из моих проектов. Проблема, которую я пытаюсь решить, состоит в том, чтобы отделить мои объекты Controller от моего класса доступа к сети. В этом контексте идеи немного запутались в моей голове.
Мне почему-то интуитивно кажется, что NetworkAccessClass должен быть делегатом для объекта Controller, потому что NetworkAccessClass действует как помощник для объекта Controller. Но похоже, что это работает в обратном порядке, потому что следующее, по-видимому, правильный способ сделать это:
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
И наконец по моему FirstViewController.h
#import "NetworkAccessClass.h"
@interface FirstViewController<NetworkAccessDelegate>
{
}
-(void) requestSucceded:(NSData *) data;
-(void) requestFailed:(int) responseCode;
@end
И то же самое в SecondViewController.h
и т. Д.
Хотя это отсоединяет мои контроллеры от моего класса Network, я не могу не чувствовать, что это неправильно , потому что контроллеры в этом случае действуют как делегаты или вспомогательные методы to Network Класс, а не наоборот. Я что-то упустил? Или это так?
Спасибо,
Тея.