2015-09-18 23 views
7

我將我的Swift應用程序升級到Xcode 7/Swift 2.0,現在突然在我的應用程序中某些節點不再工作。Xcode 7 - 一些segues不工作了

我有一個segue彈出一個「Check In」模式,它的工作原理很完美,但後來我又彈出一個「Check Out」模式,它幾乎完全相同,並且不會啓動並且應用程序被凍結。

我重新創建了從頭開始的segue,確認它與「Check In」之一相同,但它仍然不起作用。

相反,我也嘗試啓動一個空白的視圖,而不是我的簽出模式,它工作正常。

沒有錯誤,它只是凍結,我沒有確認「prepareForSegue」部分被正確調用,但我的模態的「viewDidLoad」部分沒有被調用。

僅供參考,我已關閉自動佈局。

+3

看到這個問題在這裏:http://stackoverflow.com/questions/32549020/app-frozen-by-uikit-after-upgrading-to-xcode-7/32549072#32549072 – Yaroslav

+0

完美,這正是我所說的,看到。謝謝@Yaroslav –

回答

8

您的「簽出」模式是否有UITextView?如果確實如此,那麼Xcode 7/iOS9中存在一個錯誤,如果您在storyboard中設置了默認文本值,則無法啓動包含UITextView的模態(或任何根視圖)。

解決方法是確保故事板中的UITextView爲空或具有默認的Lorem Ipsem值,而是以編程方式在viewDidLoad上的代碼中設置文本。

希望這個錯誤很快就會解決。

+4

你可以離開UITextView,但刪除文本,它的工作原理。看到這個:http://stackoverflow.com/questions/32549020/app-frozen-by-uikit-after-upgrading-to-xcode-7/32549072#32549072 – Yaroslav

+0

@Yaroslav,謝謝你,我會糾正我的答案。 –

+0

過去兩週一直在努力解決這個問題。我沒有升級我的其他Mac,保留Xcode 6,繼續在swift1.2中開發應用程序。爲什麼這個bug還沒有解決? – Sahil

1

我懷疑在你的「檢出」控制器代碼中存在無限循環。在呈現控制器(凍結時)後,嘗試在調試器中暫停應用程序並檢查堆棧跟蹤。如果沒有幫助,請嘗試在viewDidLoadviewWillAppear中逐行註釋代碼以查找導致凍結的行。

+0

viewDidLoad永遠不會被調用。上面的UITextView事情解決了我的問題。感謝您的建議。 –

1

我有這個問題,嘗試用這種

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("Storyboard Id") 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }) 

你只需要給一個故事板ID在你看來,通常它的工作。

1

我的應用程序在iOS8中工作完美。它的流程是:

VC:視圖控制器,雷士:導航視圖控制器,ER:NVC和VC,PS之間嵌入式根的關係:按Segue公司,PG:程控表示

NVC1 ---(ER) - > VC1 ---(PS) - > NVC2 ---(ER) - > VC2等。

問題是,VC1-(PS) - > NVC2賽格沒有工作,沒有凍結。 vc1.prepareForSegue()已執行,但VC2未提供。我進行了實驗,發現我沒有在這裏提到的UITextView問題。 通過下面的麪包屑概述如下,我得到了它的通過以下方式嘗試(末尾代碼)小時後工作: NVC1 ---(ER) - > VC1 ---(PG) - > VC2

以下是步驟: 正如在Segue issue in iOS9中所提到的,多個NVC不合時宜(蘋果公司忽視了在您的在線教程中實際推薦的內容並使應用程序崩潰!)。所以我修改了 NVC1 ---(ER) - > VC1 - (PS) - > VC2,而VC2仍然嵌入在NVC2中。我收到類似於StackOverflow post on view not in hierarchy的錯誤 。所以我開始以編程方式進行轉換,並且在處理present vs. push ViewController issue之後導致"tried to push modally on active view controller"消息,然後ViewController lifecycle issues導致​​消息,我得到以下代碼工作。基於這樣的經驗,我真的認爲蘋果公司應該在Xcode7/iOS9更新中獨自留下工作。

//*********** VC1.swift. A translation of working code 

    class VC1:UIViewController{ 
    private var viewController2:VC2? 
    private var showVC2: Bool = false 
    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     if(showVC2) { 
      showVC2 = false 
      self.pushVC2() 
     } 
    }//viewWillAppear 


    private var info:String? // info from incoming user action. 
    @IBAction unwindToVC1FromUserAction(incomingSegue: UIStoryboardSegue?) { 
    // Do app-specific stuff to get info from incomingSegue and 
    // store in self.info variables. 
    let myboard: UIStoryBoard = self.storyboard!; 
    self.viewController2 = myboard.instantiateViewControllerWithIdentifier(
        "VC2 Storyboard ID") as! VC2 
    self.prepareVC2() // Pass info to VC2.info, stuff you would have done in prepareForSegue 
    showVC2= true 
    } //unwind 

    private func prepareVC2() { 
     self.viewController2.info = self.info // etc.. 
    } 

    private func pushVC2() { 
     self.navigationController!.pushViewController(viewController2!, animated:false) 
    } 
} //class 
0

我有這個,但它不是以上所述。我的segue電話恰好在一個街區內。當我將調用移動到主線程時,我發現在新的View Controller中出現了'NSUnknownKeyException'錯誤。在塊內部似乎可以防止在Xcode中註冊錯誤,所以應用程序似乎掛起沒有任何錯誤。

一旦解決了原代碼工作正常。

相關問題