2014-04-04 42 views
0

這裏有很多代碼,它的確很多。有時候,segue控制器是:init'd,有時它是按原樣使用的。很明顯,在我初始化它之前將它設置爲對象,但在某些情況下,控制器無法按預期工作。似乎沒有任何關於prepareForSegue的文檔可以解決這個問題。什麼時候啓動segue控制器UIViewController:prepareForSegue:?

另外我可能會補充一些開發者甚至使用第三個選項,並簡單地重新定義它們呈現的是什麼。

我錯過了什麼?

示例 用於iPad的UIImagePickerController 需要:init(沒有照片加載到選取器中),在iPhone上按預期工作。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // This line is required for iPad functionality. 
    // UIImagePickerController *segueController = [((UIImagePickerController*)(segue.destinationViewController)) init]; 

    // This line is all that is required on iPhone/iPod 
    UIImagePickerController *segueController = (UIImagePickerController*)segue.destinationViewController; 

    segueController.delegate = self; 
    segueController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
} 

另一個SO帖子:iOS7 Storyboard image picker not working :(

編輯

看來好像有可能是用的UIImagePickerController一個問題:利用initWithCoder,但我不知道如何來驗證。

+0

你永遠不應該爲一個segue啓動一個控制器(即目標視圖控制器)。 segue爲你實例化控制器。如果您有一些特定的代碼片段,那麼您應該發佈它們。很難回答這樣的非特定問題。 – rdelmar

+0

這張貼的原因是因爲interwebs散佈着矛盾。這就是沒有「特定」代碼的原因。我可以給你一個我知道的例子 - 將會修改。 – chrisp

+0

您的編輯過於模糊而無用。每個對象都需要實例化以供您使用。有時用代碼完成,有時它是由故事板或xib完成的。如果你認爲你有一段實際的代碼顯示沒有實例化的對象的使用,那麼發佈它。我還建議你花更少的時間在網上,花更多的時間與蘋果的文檔 - 它更可靠。 – rdelmar

回答

0
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UIImagePickerController *destinationController = (UIImagePickerController*)segue.destinationViewController; 

    destinationController.delegate = self; 
    destinationController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
} 

你不[ alloc] init]一個UIViewController

+0

再說一次,這對我的iPhone來說工作得很好 - 但卻無法在iPad的popover上顯示相冊(這是一個空的popover)。一切都保持不變,但如果我:啓動控制器iPad應用程序顯示畫廊。這是我的問題中詳述的問題和問題。 – chrisp

+0

@jacobsd如果在故事板中有彈出窗口,則不需要分配init,但是如果沒有,則始終分配init。 – Schemetrical

+0

我正在關注文檔並使用彈出窗口來顯示我的UIImagePickerController。如果我只是使用傳遞的控制器:prepareForSegue,彈出窗口是空的。如果我:初始化UIImagePickerController它顯示和功能按預期。再次,這不是關於我認爲我沒有做錯什麼 - 我問「我做錯了什麼?」。 – chrisp

相關問題