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];

и иметь только один экземпляр этого класса. Для большинства случаев лучший способ;)

Вы можете типизировать делегат и установить для него какой-то конкретный делегат, и он будет вызван.

Другие вопросы по тегам