Любые проблемы, о которых я могу думать, проверены, но методы делегата все равно не сработают. Я объявил протокол под названием SocketDelegate в Socket.h
:
@protocol SocketDelegate <NSObject>
@optional
- (void)socket:(Socket *)socket handleNewConnection:(NSString *)test;
- (void)socket:(Socket *)socket didSend:(BOOL)didSend;
- (void)socket:(Socket *)socket didReceive:(BOOL)didReceive;
@end
@interface Socket : NSObject {
id<SocketDelegate> delegate;
}
@property(nonatomic,assign) id<SocketDelegate> delegate;
@end
Теперь, в Socket.m
, делегат уведомляется об успехе / ошибке отправленного / полученного файла:
@implementation Socket
/* I checked: both of these methods are called */
- (void)stopSendWithStatus:(NSString *)statusString {
[self.delegate socket:self didSend:isSent];
}
- (void)stopReceiveWithStatus:(NSString *)statusString {
[self.delegate socket:self didReceive:isReceived];
}
@end
ViewController.h
соответствует делегату:
@interface ViewController : UIViewController <SocketDelegate>
и в ViewController.m
я назначил делегата через класс NetController
, который связывает Socket и ViewController вместе. и я реализую методы делегата:
@implementation ViewController
- (void)viewDidLoad {
/* I checked: this method is called */
/* Both 'netController' and 'socket' are initialized correctly
netController = [[NetController alloc] init];
[[netController socket] setDelegate:self];
}
@end
@implementation ViewController (SocketDelegate)
- (void)socket:(Socket *)socket didSend:(BOOL)didSend {
NSLog(@"didSend %@", didSend); // Nothing happens...
}
- (void)socket:(Socket *)socket didReceive:(BOOL)didReceive {
NSLog(@"didReceive %@", didReceive); // Nothing happens...
}
@end
Кроме того, я попытался установить делегат в других местах, кроме viewDidLoad, внутри ViewController.m, но это не имеет никакого эффекта. Конечно, у меня нет ошибок компилятора и ошибок времени выполнения ... Что не так в моем коде?