2013-08-27 4 views
0

У меня проблема с передачей аргументов в Objective C. Вот моя ситуация:Объект C: переменная экземпляра в качестве ссылки

У меня есть корневой контроллер (главный экран). В его представлении есть ScrollView, и он содержит 3 вида (следующие 3 контроллера). Вы можете прокручивать его по горизонтали, и эти 3 вида внутри ScrollView меняются. Затем у меня есть один объект, который связывается с некоторым оборудованием. Есть сеанс и потоки ввода/вывода. Этот объект получает некоторые данные, и мне нужно показать эти данные в представлениях (корневой режим и 3 представления в режиме прокрутки). Также корневой контроллер и эти 3 контроллера иногда запрашивают некоторые данные.

Это означает, что объект связи должен иметь экземпляры всех контроллеров для непосредственного отправки данных. Но контроллеры должны иметь экземпляр объекта связи, чтобы иметь возможность запрашивать данные.

Я хотел сделать так: Корневой контроллер создает 3 контроллера для своих подпрограмм (в прокрутке) и показывает их. Он также создает объект связи и отправляет этому объекту эти 3 контроллера (по ссылке). А также отправьте каждому экземпляру контроллера объекта связи. В этом случае объект связи может напрямую передавать данные контроллерам, а контроллеры могут запрашивать данные также напрямую.

Обычно я работаю с C#, поэтому передавать аргументы по ref не проблема, но кажется, что в Objective C это невозможно. Когда я хочу отправить ссылки, он создает копию и отправляет ее, поэтому у меня есть две копии объекта, и я не хочу этого. Я хочу иметь ссылки на один объект. Я попытался отправить указатель - (UIViewController **)controller, но, похоже, он не работает.

Можете ли вы сказать, как я должен это решить? Следующая идея заключается в том, что корневой контроллер создает 3 субконтроллера и один объект связи. Этот объект связи отправляет сообщения корневому контроллеру и пересылает эти сообщения в правый контроллер. А субконтроллеры будут отправлять сообщения корневому контроллеру и перенаправлять его на объект связи.

+1

Вы определенно ** можете ** эмулировать ссылки с помощью указателей. В каком смысле «это не работает»? –

+0

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

ответ

0

Если вы не копировать объекты явного вида передается по ссылке в Objective-C:

void addWorld(NSMutableString *stringReference) { 
    [stringReference appendString:@"world!"]; 
} 

передается по ссылке:

NSMutableString *greeting = [NSMutableString stringWithString:@"Hello, "]; 
addWorld(greeting); 
NSLog(@"%@", greeting); 

Смотрите также ответ "How to pass values by reference in objective C".

0

Я идиот. Когда я отправлял ссылку, это было ноль. Задача решена, Objective C передает объекты по ссылке. Но все же мне интересно, правильно ли разрешен прямой доступ объекта связи к контроллерам и прямой доступ контроллеров к объекту связи?

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