2012-05-08 13 views
0

После прочтения нескольких сообщений и форумов stackoverflow я очень запутался в этом вопросе. Не говорите об использовании делегатов, но может привести к проблеме с памятью, если имеется большой объем данных.Обмен данными через ViewControllers

Я должен обрабатывать только 600-байтовые данные с устройства TCP/IP и переопределять существующее значение с помощью нового.

Я сделал RootViewController, который имеет специальный вид и сокет TCP/IP, кроме того, у меня есть два других ViewControllers, которые должны использовать данные из RootViewController (TCP/IP).

Должен ли я сделать отдельный класс для файлов TCP вместо того, чтобы смешивать его в моем RootViewController?

Также как я должен обрабатывать обмен данными через ViewControllers?

Заранее спасибо.

ответ

1

Для обмена данными между классами вы можете использовать механизм уведомлений. Опубликовать уведомление в вашем FromClass.m:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:yourTCPData, @"TCPData", nil]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotTCPData" object:nil userInfo:options]; 

В вашем ToClass.m viewDidLoad добавить следующее:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeSomeThingUsefulWithTCPData:)name:@"gotTCPData" object:nil]; 

... и где-то в вашем ToClass.m добавить этот метод:

- (void)makeSomeThingUsefulWithTCPData:(NSNotification *)notification { 
    NSDictionary *dict = [notification userInfo]; 
    yourTCPDataClass *yourTCPDataObject = [dict objectForKey:@"TCPData"]; 
    // Here make something useful with your TCP data 
    } 

Также добавьте это в ваш ToClass.m viewDidUnload освободить объект наблюдателя при вид будет выгружен:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

Где находятся данные? Я попытаюсь реализовать это. – JavaCake

+0

Данные находятся в объекте yourTCPData. Сообщение из первого фрагмента кода в любом месте, где вам нужно отправить данные другому объекту. –

+0

Итак, 'object: nil' должен быть установлен в реальный объект? – JavaCake

2

Если вы много работаете со своим «материалом» TCP (например, получите данные, отобразите данные, переформатируйте данные, компиляторы или измените данные, а затем снова сохраните и т. Д.), Тогда я бы предложил создать отдельный class (возможно, NSObject), который имеет все методы для обработки данных TCP, а затем создает экземпляр этого объекта в контроллере корневого представления.

Что касается получения данных в других контроллерах представления, вам нужно будет создать ссылку на контроллер корневого представления в других контроллерах представлений, а затем соединить их в построителе интерфейса (или программно). Просто убедитесь, что вы не создаете новый экземпляр контроллера корневого представления (т. Е. Не используйте [[RootViewController alloc] init];)

Это имеет смысл? Если вы разместите дополнительную информацию о структуре своего приложения (например, используете ли вы контроллер навигации и т. Д.), Я мог бы быть более конкретным для вас.

Удачи вам!

+0

Если это делает никакой разницы я использую TabBar. Я реализовал класс для своего контроллера TCP, и он отлично работает с одноэлементным. – JavaCake

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