2

我在ARC上使用UISplitViewControllerUISplitViewController第二次崩潰設置viewControllers

我在我的AppDelegate中設置控制器,然後將其設置爲rootViewController。我已經確定,使之成爲property

@property (strong, nonatomic) UISplitViewController *splitViewController; 

使用viewControllers屬性設置根和細節工作正常時,首先創建。再次設置時,它會再次正常工作,但我第三次嘗試設置viewControllers屬性時發生崩潰。

這是我如何設置這些:

Screens *edit = [[Screens alloc] initWithStyle:UITableViewStyleGrouped]; 
    UINavigationController *c = [[UINavigationController alloc] initWithRootViewController:edit]; 

    if ([Utility isIpad]) { 
     Map *a = (Map *)[[MyAppDelegate instance].splitViewController.viewControllers objectAtIndex:0]; 
     NSArray *viewControllers = [NSArray arrayWithObjects:a, c, nil]; 
     UISplitViewController *splitView = [MyAppDelegate instance].splitViewController; 
     splitView.viewControllers = viewControllers;// <--- Crashes here 
    } else { 
     [self presentModalViewController:c animated:YES]; 
    }//end 

爲什麼它會崩潰,當我嘗試設置viewControllers財產?它幾乎看起來像它被釋放,但我知道,splitViewController仍然存在...

這可能是與ARC有關嗎?

堆棧跟蹤:

enter image description here

+0

什麼是它的崩潰回溯?另外,懷疑它與ARC有關。 – mattjgalloway 2012-03-28 22:08:39

+0

好吧,愚蠢的問題。我如何看到回溯?我只有在Debug Navigator中有什麼。 – 2012-03-29 00:31:34

+0

在調試導航器中應該有回溯。底部有一個滑塊,如果您一直滑到右側,您將獲得完整的回溯。 – mattjgalloway 2012-03-29 08:00:52

回答

8

剛纔我同樣的錯誤。在我的情況下,問題在於我最初將詳細視圖控制器設置爲UISplitViewController的代表。然後我重構,使根視圖控制器處理的東西,但我忘了從.xib文件中刪除連接。

所以,當我第一次設置splitView.viewControllers一切正常,但我的原始細節控制器將被釋放,UISplitViewController留下一個不好的指針作爲delegate。下次我設置viewControllers屬性時,UISplitViewController試圖通過指針調用其委託並崩潰。

你寫道,你在你的應用程序委託中設置了控制器,所以這可能不是完全相同的問題。不過,請仔細檢查以確保UISplitViewControllerdelegate屬性設置正確!

+0

+1。我的應用因此而崩潰,我剛剛花了最近三個小時試圖弄清楚這一點。你救了我,誰知道多少悲傷! – Julian 2012-06-19 02:19:32

+0

謝謝!我很高興我能回饋一些東西 - Stack Overflow爲我節省了幾周的調試痛苦:)。 – 2012-08-24 17:43:11

+0

+1清楚的答案 – amcc 2012-11-01 00:05:55

相關問題