2013-04-15 4 views
1

.m файл, из которого я пытаюсь установить переменную message:Передача переменной в другой контроллер вида, используя instantiateViewControllerWithIdentifier

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    SingleMessageViewController* vc = (SingleMessageViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"SingleMessageViewController"]; 
    vc.message = [tableView cellForRowAtIndexPath:indexPath].textLabel.text; 
    [self.navigationController pushViewController:vc animated:true]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

.h файл контроллера представления я инстанцировании:

@interface SingleMessageViewController : POSCommonViewController 
{ 
    NSString *message; 
} 

@property (nonatomic, retain) NSString *message; 
@end 

.m файл контроллера представления я инстанцировании (viewDidLoad метод только):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"%@", self.message); 
} 

NSLog в последнем файле цитируемый возвращает нулевые (вид нагрузки без каких-либо проблем). Я пытался изменить свойства и т. Д. - ничто не помогло мне. Что может быть проблемой здесь?

+0

Вы синтезируете переменную сообщения? –

+0

Вы проверили [tableView cellForRowAtIndexPath: indexPath] .textLabel.text; возвращает правильное значение? –

ответ

0

Свойство textLabel свойства выбранной ячейки может быть нулевой. Используйте промежуточную строковую переменную, чтобы получить текст ячейки, а затем установите для нее сообщение. Это облегчит просмотр сообщения, когда вы пройдете первый метод в отладчике.

+0

Спасибо, это была ошибка в других частях класса, и свойство было установлено на 'nil'. – syntagma

-1

Нет, это не работает. Вы создаете объект контроллера внутри первого контроллера и устанавливаете свойство для этого конкретного объекта. Тогда как вы можете получить доступ к этому в новом объекте контроллеров? Для достижения этой цели вы можете использовать следующие способы:

1.you может переопределить метод инициализации во втором контроллере представления, который initWithMessage:(NSString *)message

2.You может добавить свойство внутри класса AppDelegate. Это будет доступно через приложение.

3.Но лучший способ - сделать одноэлементный класс, если вы хотите поделиться чем-либо внутри классов.

+2

Нет ничего плохого в доступе к свойствам объекта через его аксессоры, как это делает OP. – Caleb

+0

@ Калеб: Не знаю как? Он устанавливает значение на объекте второго контроллера представления в контроллере первого вида и получает доступ к нему на другом объекте. –

+0

'[self.navigationController pushViewController: vc animated: true];' Он использует его в одном и том же объекте ('vc'). Все в порядке. – viral

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