2012-11-03 3 views
0

Предполагая, что проект использует ARC. ContentViewController является содержание UIPopoverControllerПередача данных в ViewController, который является содержимым UIPopoverController

- (IBAction)showPop:(UIButton *)button 
{ 
    _pressDate = [NSDate date]; 
    ContentViewController *cvc = [[InfoViewController alloc] initWithNibName:@"ContentViewController" bundle:nil]; 
    self.popController = [[UIPopoverController alloc] initWithContentViewController:cvc]; 
    cvc.dateLabel.text = [_pressDate description]; 
    [self.popController presentPopoverFromRect:button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
} 

Код выше работ, без проблем. Но я заметил, что если я называю

cvc.dateLabel.text = [_pressDate description]; 

перед

self.popController = [[UIPopoverController alloc] initWithContentViewController:cvc]; 

метка не получает обновления. Я просто хотел бы понять, в чем дело?

+0

Я не уверен в последовательности событий с пирогом, но ключевым моментом является то, что ContentViewController в 'viewDidLoad:' это первое место, где его вид иерархия гарантированно существует , Вы можете попробовать поставить сообщение журнала там, а другое, где вы выполняете задание, чтобы посмотреть, что происходит. (Или запишите значение 'cvc.dateLabel', когда вы выполняете задание.) –

+0

Благодарим вас за ответ. Я ошибаюсь в том, что эти метки в ContentViewController являются Outlet и объявлены как @property (слабый, неатомный) IBOutlet UILabel * dateLabel; и это было ноль. Но для меня непонятно, почему это работает, если я назначаю текст после инициализации. UIPopoverController – Michael

+0

. Вероятно, станет ясно, если вы поместите оператор журнала в 'viewDidLoad:' и рядом с вашим назначением. Если ваше задание ** после ** 'viewDidLoad:' оно будет работать. –

ответ

1

Там является thumbrule, что вы не должны изменять пользовательский интерфейс в ViewController перед viewDidLoad запускается, becuase из þér причин @Phillip Morris описано .. Вместо установки cvc.dateLabel.text непосредственно перед viewDidLoad обжигают, объявить свойство textForDateLabel и установить cvc.textForDateLabel = [_pressDate description]; , Тогда в viewDidLoad вашего ContentViewController, сделать self.dateLabel.text = textForDateLabel;

+0

Благодарим вас за дополнительную информацию. Я был слишком сконцентрирован на этих контроллерах и ... это было глупо с моей стороны. – Michael