2013-11-25 35 views
5

我剛剛遇到了一個我經過測試的應用程序的問題。我敲我的頭向牆上理解爲什麼我得到這個錯誤:嵌套推動畫iOS7的錯誤?

2013-11-25 09:02:55.687[186:60b] nested push animation can result in corrupted navigation bar 
2013-11-25 09:02:56.055[186:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted. 
2013-11-25 09:02:57.666[186:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview' 

一段時間,我創建了一個新的項目,試圖重現錯誤後:

這happends當我按下兩個不同時段的酒吧按鈕項目,然後同時發佈。我正在使用帶有segues的故事板,並且沒有任何自己寫的代碼。這是一個iOS7的錯誤,還是我錯過了什麼?

我一直無法重現的模擬器,因爲我沒有兩個光標...我使用一個iPad2與iOS7故事板的7.0.3

圖片:

enter image description here

編輯:

,因爲我得到砸了,沒有沒有人甚至試圖重現並確認這個bug完全downvoted,我已經報告說,它無需確認。

EDIT2:

蘋果要求一個堆棧跟蹤。但是,既然我給了他們重現的確切步驟,我沒有打擾。這不是我的工作。所以請隨時舉報。

+0

如果您嘗試點擊任何按鈕,它將如何生成錯誤 – codercat

+0

我按下兩個欄按鈕項目,按住它們。並同時發佈。 – ullstrm

+0

這不是一個編程問題,如果你認爲它是一個錯誤,它應該真的在蘋果電路板或雷達上。 – Fogmeister

回答

0

這可能是因爲你在同一時間調用兩個segues,當你釋放按鈕時,應用程序試圖在其他segue完成之前調用一個segue。

所以我能看到的是,Xcode提出的警告是因爲你的一個視圖控制器是由segue觸發的,另一個視圖控制器的segue被觸發而不等待第一個視圖控制器的加載結束。

您可以嘗試設置bool或某種控制器,用於檢查第一個視圖控制器何時加載,然後在知道第一個視圖控制器已正確加載時觸發另一個繼續。

+0

是的,我現在用自己的布爾標誌手動執行segues以檢查它是否安全。蘋果進行越野車賽格代碼。爲什麼他們鼓勵我們在故障車時使用故事板? – ullstrm

+1

我在使用Apples開發人員工具進行編程時遇到的大多數問題和錯誤都與我自己的錯誤有99.9%的時間有關,所以我無法真正評論Xcode錯誤。 – Oskariagon

+0

這正是爲什麼我在這裏發佈了這個消息,看看是否有其他人可以在發佈關於蘋果的bug報告之前進行復制。 – ullstrm

0

我是通過以下操作讓我的應用程序相同的問題: 1登錄(賽格瑞與動畫進行) 2迅速作出新的屏幕上進行選擇(啓動另一賽格瑞)

,如果你嘗試在上一個過渡動畫完成之前執行一個繼續,它可以將其擰緊。所以我在執行segue之前添加了一個延遲,它似乎修復了它。然而,我不認爲這是最終的解決方案,因爲segue動畫持續時間可能會因設備速度有所不同而有所不同。

我認爲最好的解決方案是觸發繼續的AFTER viewDidAppear。

0

我剛剛實現了類似的東西,它現在正在工作。

所以我有視圖控制器A,B & C.通常用戶可以從A導航到B,從B導航到C,但現在我創建了一種用戶可以自動從A導航到C(通過B)的方式。

我所做的是在B中創建一個公共方法來推C這種方法看起來像:

- (void)pushC { 
    if ([self isViewLoaded] && self.navigationController.visibleViewController == self && ![self isBeingPresented] && self.didViewAppear) { 
     [self performSegueWithIdentifier:@"CSegue" sender:self]; 
    } 
    else { 
     [self performSelector:@selector(pushC) withObject:nil afterDelay:0.4f]; 
    } 
} 

一切都已經從didViewAppear財產給你開。那一個我在- viewDidAppear上設置爲true。

然後,我只需要調用- pushC在視圖控制器A的- prepareForSegue方法正如我們所看到的,他會等待合適的時機,以實際調用下一SEGUE。

這工作正常,但顯示所有的導航過渡,我不需要。我寧願能夠將一棵樹推入導航控制器,這樣我只有一個轉換導航。好吧,我想我以後必須回到這個東西。

這就是說我不認爲這是一個錯誤,但實際上是iOS7行爲的變化,因爲動畫變長了。