2013-10-21 104 views
0

我有三個VC在我的應用程序A-> B-> C(A & B有SKView與SKScene在其中)。UINavigationController popViewController bug

以下場景應該運行:
A(按下按鈕) - > B(播放場景,完成) - > C(幾個按鈕和UILabels,也從Game Center加載信息)。 當我從C-> A(popToRootViewController)彈出時,一切正常(儘管我曾經看到內存泄漏一次,我認爲)。

問題是,當我按下一個按鈕,從C-> B做popViewController。

在第一次工作時,B再次加載,而當涉及到C時,第二次動畫將不起作用。同樣,當我在NSLog self.navigationController.viewControllers中顯示(當C彈出後從B-> C轉換時)有2個C視圖控制器 - C已經創建兩次(從C-> B刪除,然後創建兩次)!

考慮這種情況:

AViewController: 0x17683d80,

BViewController: 0x1c956720

當B被加載(選自C稱爲popViewController之後)第二次,然後

"AViewController: 0x17683d80",
"BViewController: 0x1c956720",
"CViewController: 0x1ca49e40",
"CViewController: 0x1ca4c6c0"

當C後的NSLog'd第二次加載。如果我第二次嘗試從C-> B(有時會顯示黑色視圖,有時會崩潰),該應用也會崩潰。

發生了什麼事? 謝謝!

回答

0

很難知道沒有看到你的代碼,但我有一個問題,與模態視圖控制器的緩慢解僱,但設置我的場景了這種方式解決了我的問題。

@implementation ViewController { 
    SKView *_skView; 
} 

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

    if (!_skView) { 

     _skView = [[SKView alloc] initWithFrame:self.view.bounds]; 
     _skView.showsFPS = YES; 
     _skView.showsNodeCount = YES; 
     SKScene * scene = [MyScene sceneWithSize:_skView.bounds.size]; 
     scene.scaleMode = SKSceneScaleModeAspectFill; 
     [_skView presentScene:scene]; 
     [self.view addSubview:_skView]; 
    } 
} 

viewDidLayoutSubviews是如此景觀有正確的座標,如果你在肖像只是保持原來的設置。最主要的是擁有_skView iVar。

+0

問題並不是緩慢的解僱。問題是一個非解僱(不彈出!) –

+0

所以上述沒有幫助我猜。 – DogCoffee

+0

當你從C到B的skView,最有可能的是,如果你不使用像上面那樣的iVar,那麼正在創建一個新的實例,就像你在日誌中記錄的那樣。設置一個iVar應該修復的問題 – DogCoffee

相關問題