2012-10-10 85 views
2

我遇到了一個完全困擾我的問題。 performSegueWithIdentifier在大多數設備上工作得非常好,但是當我使用ios 6.0版本在iPad上運行我的程序時,segue沒有發生。performSegueWithIdentifier無法在某些設備上工作

這裏是我的代碼是如何工作的:

我打電話performSegue:

[self performSegueWithIdentifier:@"watchSegue" sender:self]; 

Storyboard segue 觸發目標視圖控制器的initWithCoder:

-(id) initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 

    } 

    return self; 
} 

觸發prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    ... 
} 

這是不同的地方。對於在這個工程的所有設備,目的地視圖控制器的viewDidLoad中被調用:

- (void)viewDidLoad 
{ 
.... 

不過與iPad iOS6.0它不會被調用,並實際執行不SEGUE。

重要的是要注意,我實際上沒有不同的iPad應用程序,我只是在iPad上運行iPhone應用程序,所以代碼和故事板是相同的。

------------ UPDATE 1: 我剛剛在運行5.1.1的iPhone上重現了這個錯誤。這超出了我爲什麼我的賽段一直在這個時間工作(並在這個版本中工作),只是在這種情況下,他們停止工作...

-----------更新2: 這個回答可悲的是不會對這個問題有更大的理解,也不會阻止它再次發生。然而,我確實解決了這個問題。

通過刪除segue並將其添加回故事板,我能夠解決問題。 viewDidLoad現在被調用並執行segue。

如果有人瞭解可能會出現什麼問題,我將不勝感激。

回答

1

我不確定這是否100%正確,因爲它似乎沒有在Apple中記錄,iOS6的視圖加載順序已更改。

在iOS5中,調用prepareForSegue之前,您的目標視圖控制器已準備就緒,視圖已加載。但在iOS6中,目標視圖控制器尚未加載視圖。所以如果你的代碼修改了任何UI相關的東西,它將不會在iOS6上工作。

我的解決方案是明確調用[destVC loadView]:prepareForSegue

+0

感謝您的迴應。我發現我實際上也可以在iOS 5.1.1中重現此問題。儘管我正在調查,但我不完全明白爲什麼某個特定的細節不起作用。 – Alex

+0

只要調用loadView,那麼它不會傷害太多...因爲如果視圖已經加載,它將返回immd(懶惰實例化) – JeffChan

相關問題