iOS - установка делегата входного потока в другой класс
Мне интересно, если это возможно, чтобы установить делегат входного потока в другой класс. Пока что все примеры, с которыми я сталкивался, относятся к себе:[inputStream setDelegate:self]
, Я хочу установить делегат в другой класс, как ViewController
не сам Заранее спасибо.
2 ответа
Если твой ViewController
отвечает на NSStreamDelegate
Вы можете инициировать экземпляр контроллера и установить делегата как обычно.
@interface ViewController : NSOperation<NSStreamDelegate>
...
-
ViewController *vc = [[ViewController alloc] init];
[inputStream setDelegate:vc];
например
Обновить:
использовать идентификатор или UIViewController<NSStreamDelegate>
переменная в TCPConnection
класс для хранения родителя.
Например:
// TCPConnection.h
@interface TCPConnection : NSOperation<NSStreamDelegate>
@property(nonatomic, assign) UIViewController<NSStreamDelegate> parent;
-(id)initWithParent:(UIViewController<NSStreamDelegate> *)p_parent;
...
...
// TCPConnection.m
-(id)initWithParent:(UIViewController<NSStreamDelegate> *)p_parent
{
self = [super init];
self.parent = p_parent;
return self;
}
// UIViewController<NSStreamDelegate>.m
TCPConnection *connection = [[TCPConnection alloc] initWithParent:self];
Или решение Singlton, где вы всегда звоните только
TCPConnection *connection = [TCPConnection sharedInstance];
и иметь только один экземпляр этого класса. Для большинства случаев лучший способ;)
Вы можете типизировать делегат и установить для него какой-то конкретный делегат, и он будет вызван.