2013-09-03 3 views
1

Мне интересно, если можно установить делегат входного потока в другой класс. Пока все примеры, с которыми я столкнулся, связаны с самим собой: [inputStream setDelegate:self]. Я хочу установить делегат в другой класс, как ViewController, а не сам. Заранее спасибо.iOS - Установка делегата входного потока в другой класс

+0

Вы не можете решить проблему? Или он все еще открыт? – geo

+0

Я искал механизм делегирования, но позже я заметил, что механизм центра уведомлений более подходит для меня. Я создаю свой singleton 'TCPConnection' объект, и когда я получаю вход с сервера, и я отправляю уведомление, чтобы просмотреть класс контроллера, чтобы позаботиться об ответе и внести изменения в интерфейс. Спасибо за ваши советы. :) –

ответ

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

Или Синглтон решение, где вы всегда вызывать только

TCPConnection *connection = [TCPConnection sharedInstance]; 

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

+0

Спасибо, но я думаю, что это немного жестко закодировано, потому что в моем механизме я хочу динамически назначать этот 'ViewController'. Например, я создаю класс с именем 'TCPConnection', который имеет такие атрибуты, как inputStream и outputStream. С этим я могу создать этот объект в каждом «ViewController» в моем проекте. Проблема заключается в том, что в классе TCPConnection я могу узнать, какой «ViewController» создал объект «TCPConnection», поэтому я могу установить в качестве делегата «ViewController». У меня все ясно? :) –

+1

вы можете передать класс, который создал экземпляр для вашего TCPConnection (id parent). Уже подумал, может ли здесь быть один сингл-решение? Таким образом, только ваш TCPConnection обрабатывает все и просто корректируется другими классами? ;) – geo

+0

Спасибо за советы, я это рассмотрю. :) –

0

Вы можете отобразить делегат и назначить его определенному делегату, и он будет вызван.

Смежные вопросы