[英]Why would adding a delegate to a UINavigationController crash my app?
[英]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.