2012-02-29 6 views
0

У меня есть файл code_tab.m, который обрабатывает файл UI и code.m, который выполняет хруст данных, а также обновляет MutableArray. Когда code.m обновляет массив, я хочу обновить таблицу в поле зрения, связанную с connection_tab.m. У меня есть функция в коде_tab.m, которая имеет:Xcode Обновление таблицы с помощью другого метода

[self.table tableupdate] 

Что работает, как ожидается, при вызове внутри страны. Когда одна и та же функция вызывается из файла code.m (когда был обновлен массив), ничего не происходит, хотя я вижу, что к этому же коду обращаются.

У меня есть доступ установки, имея эту строку в файле code.h:

connection_tab* connectiontab_script; 

и затем вызвать его в code.m с

connectiontab_script = [[connection_tab alloc] init]; 
[connectiontab_script tableupdate]; 

Я, очевидно, пропустил что-то важное. Есть ли способ, которым один метод может изменить визуальное отображение другого, в этом случае обновить таблицу уже на экране?

+1

Вы создаете еще один экземпляр вашего 'connection_tab' и, таким образом, вы фактически обновляете таблицу, которую вы не видите, а не ту, которая была первоначально загружена. Вам нужно передать ссылку на ваш исходный 'connection_tab' или посмотреть на использование делегатов. – GregularExpressions

+0

То, что я думал, может случиться. Как вы собираетесь передать ссылку на начальную connection_tab? –

+0

Можете ли вы показать нам, как «connection_tab» связывается с вашим кодом «code»? – GregularExpressions

ответ

0

Технически Вы должны избегать того, чтобы ваш класс данных вызывал методы на ваш взгляд, так как это может привести к головной боли в будущем, MVC - рекомендуемая практика развития.

Однако, вы можете добиться того, что вы пытаетесь сделать путем внесения изменений в свой метод initNetworkCommunication в code, чтобы передать ссылку на активный вид через:

- (void) initNetworkCommunicationForView:(UIViewController*)passedVC 

Какой ты назвал бы внутри connection_tab как:

[appDelegate.connection_script initNetworkCommunicationForView:self]; 

Тогда в code вы могли бы сделать (если заявление исключает предупреждения):

if ([passedVC respondsToSelector:@selector(tableupdate)]) { 
    [passedVC performSelector:@selector(tableupdate)]; 
} 

В зависимости от структуры вашего класса code вам может потребоваться создать переменную класса для хранения passVC, если вызов tableupdate не находится в пределах initNetworkCommunication.

PS Вы также можете настроить метод, чтобы быть специфическими для вашего connection_tab класса, как:

- (void) initNetworkCommunicationForView:(connection_tab*)passedCT 

Тогда вы могли бы канаву материал селектора и идти с:

[passedCT tableupdate]; 

Но я пошел с UIViewController по соображениям совместимости.

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