2012-11-03 68 views
0

假設該項目正在使用ARC。 ContentViewController是UIPopoverController將數據傳遞給作爲UIPopoverController內容的ViewController

- (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

還有就是你不應該編輯viewDidLoad中前一個視圖控制器的UI一個thumbrule運行,監守的原因療法描述@Phillip Morris ..而不是設置cvc.dateLabel.text直接viewDidLoad中被觸發之前,聲明屬性textForDateLabel的,並設置cvc.textForDateLabel = [_pressDate description]; 。 然後在你的ContentViewController的viewDidLoad,做self.dateLabel.text = textForDateLabel;

+0

謝謝你的額外信息。我太專注於那些popover控制器,而且......從我這邊來說這很愚蠢。 – Michael

相關問題