2013-07-04 60 views
1

在我最近的項目中,我使用了presentviewController來組織視圖的切換。但是有一個奇怪的問題。涉及presentViewController的崩潰

首先我寫了一個關於git hub的演示:test present view。希望它能使問題更容易理解。

其次,我展示我在演示中所做的: 1)中的根視圖控制器T1RootViewController,它有一個屬性:

@property (strong, nonatomic) T1TopViewController1 *top1VC;
當它加載,它增加了T1TopViewController1作爲其唯一的子視圖:
self.top1VC = [[T1TopViewController1 alloc] initWithNibName:@"T1TopView1" bundle:nil]; 
[self.view addSubview:self.top1VC.view];

2)T1TopViewController1有一個屬性:

@property (strong, nonatomic) T1TopViewController2 *topVC2;
它也有一個按鈕,這本T1TopViewController2時的pressed它:
self.topVC2 = [[T1TopViewController2 alloc] initWithNibName:@"T1TopView2" bundle:nil]; 
[self presentViewController:self.topVC2 animated:NO completion:nil];

3)T1TopViewController2是幾乎相同T1TopViewController1,不同之處在於它提出T1TopViewController3

4)T1TopViewController3有一個按鈕,按下時會回到顯示T1TopViewController1:

UIWindow *rootWin = [[UIApplication sharedApplication] keyWindow]; 
T1RootViewController *rootVC = (T1RootViewController *)rootWin.rootViewController; 
[rootVC.top1VC dismissViewControllerAnimated:NO completion:nil];

然後運行這個程序,從T1TopViewController1,單擊每個視圖上的按鈕,直到出現T1TopViewController3。然後點擊T1TopViewController3按鈕,這將返回到T1TopViewController1。然後再次單擊T1TopViewController1上的按鈕。現在可能出現問題:
1)在IOS 5模擬器,所有的罰款
2)在IOS 6.1模擬器或設備,它會崩潰,具有日誌:
測試[699:C07] * - [T1TopViewController2 isKindOfClass:]:發送到釋放實例的消息0x75ade30

我真的不知道我的代碼有什麼問題,以及如何解決它。我會非常感謝任何幫助。

p.s.開發環境是mac os x 10.8.4,xcode 4.6.3。該項目啓用ARC。

回答

0

我跑了你的應用程序,我看到了一些奇怪的東西,你有一個UIViewController作爲RootViewController,然後你初始化另一個UIViewController並將他的UIView添加到RootViewController的視圖。

反正這裏是我做了什麼:

您可以將代碼從AppDelegate中改成這樣:

T1TopViewController1 *cont = [[T1TopViewController1 alloc] initWithNibName:@"T1TopView1" bundle:nil]; 
self.window.rootViewController = cont; 

,而不是你有什麼。

和功能:

- (IBAction)backBtn_onTouchUpInside:(id)sender 
{ 
UIWindow *rootWin = [[UIApplication sharedApplication] keyWindow]; 
[rootWin.rootViewController dismissViewControllerAnimated:NO completion:nil]; 
} 

從T1TopViewController3

現在,您可以根據需要更改控制器爲多。

0

我不知道爲什麼你的代碼不工作。但是我找到了一種方法來實現你想要在你的測試項目中做什麼。如果你交換的T1TopViewController3按鈕的動作

- (IBAction)backBtn_onTouchUpInside:(id)sender 
{ 
    UIViewController *presentingViewController = self.presentingViewController; 
    [self dismissViewControllerAnimated:NO completion:^{ 
     [presentingViewController dismissViewControllerAnimated:NO completion:nil]; 
    }]; 
} 

它應該工作。

相關問題