簡體   English   中英

為什么我的UINavigationController在發布配置上崩潰?

[英]Why does my UINavigationController crash on release configuration?

我需要刪除堆棧中的以前的視圖控制器。 我過去已成功使用此方法,沒有任何問題:

NSMutableArray *vcs = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    BOOL removedFlag = YES;
    while (removedFlag == YES)
    {
        removedFlag = NO;
        for (UIViewController *vc in vcs)
        {
            if( ![vc isKindOfClass:[self class]] && ![vc isKindOfClass:[MenuVC class]] )
            {
                [vcs removeObject:vc];
                removedFlag = YES;
                break;
            }
        }
    }
    [self.navigationController setViewControllers:[NSArray arrayWithArray:vcs]];

現在,我正在更新該應用程序,它神秘地崩潰於發行版配置,而不是調試。 另外,在調試模式下沒有任何警告。 我認為SDK有所改變。 它從來沒有這樣做過。

我已經提供了一個示例項目: http : //dl.dropbox.com/u/7834263/RemoveTest.zip

這是一個啟用ARC的項目。

第一行實際上應該是:

NSMutableArray *vcs = [self.navigationController.viewControllers mutableCopy];

NSMutableArray是NSArray的子​​類。 arrayWithArray是NSArray類的方法-它創建一個不可變的數組。 mutableCopy方法創建原始數組的可變副本。 實際上,您永遠都不應該能夠在vcs數組上調用removeObject ,因為它實際上從來不是NSMutableArray,而是NSArray。

刪除堆棧中先前的viewController的簡單方法可能是:

 int vcIdx=[self.navigationController.viewControllers indexOfObject:self]-1;
 NSMutableArray *vControllers = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; 
 [vControllers removeObjectAtIndex:vcIdx]; 
 self.navigationController.viewControllers=vControllers;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM