我的應用程序有一個標籤欄控制器,其中一個標籤項是一個分離視圖控制器。它是主視圖控制器(即在索引0處)是一個從nib加載的導航控制器,由於它是自定義導航欄。爲什麼我的視圖在低內存警告中消失?
如果這聽起來有點模糊,那麼它的組合如下:1)無法將SVC添加到IB的TBC中; 2)iOS 4.2 splitview-navbar-colorTint錯誤。事實上,自從昨天實施解決方案以來,我一直在遇到低內存警告的問題。
解決方法之前我用2個導航控制器初始化SVC並以編程方式將其添加到TBC(由於IB對th標籤欄的限制)並且沒有問題 - 除了那個蘋果錯誤。
小workaround demo也工作正常,即使在低內存警告後。但它不涉及標籤欄的額外開銷。
但在my adaption of the workaround demo它開始全部變成梨形。發出低存儲器警告,同時顯示分割視圖,整個左側(主視圖)消失。設備上的行爲完全相同,實際上我最初在那裏發現它。
我很困惑發生了什麼事。顯示的視圖(nav cont的根視圖)由表視圖子類控制。我重寫了didReceiveMemoryWarning,但這並沒有幫助。此外(相應地!),超級觀點不是零。這是一個UITableView。完全正確。
所以,我在想導航控制器正在發佈?但是哪裏?爲什麼不在原始演示中?現在的區別是添加了我的標籤欄控制器。這是我的代碼,將其添加到標籤欄:
- (void) addTabItemSplitViewWithNavConRoot:(BOOL)hasRootNC {
// init master/detail views
SV1RootViewController *rvc = [[SV1RootViewController alloc] initWithNibName:@"SVC1RootView" bundle:nil];
SV1DetailViewController *dvc = [[SV1DetailViewController alloc] initWithNibName:@"SVC1DetailView" bundle:nil];
rvc.detailViewController = dvc;
UINavigationController *nc = nil;
if (hasRootNC) {
nc = [self.pSVC1.viewControllers objectAtIndex:0];
nc.viewControllers = [NSArray arrayWithObjects:rvc, nil];
nc.navigationBar.tintColor = [UIColor redColor];
} else {
nc = nil;
}
UIViewController *vc = (hasRootNC)? (UIViewController*)nc :rvc;
UISplitViewController *svc = [self newSplitViewControllerWithMasterVC:vc detailVC:dvc];
svc.delegate = dvc;
// init the tab bar item
svc.tabBarItem = [[UITabBarItem alloc] initWithTitle:(hasRootNC)? @"SplitView with Nav Root":@"Simple SplitView"
image:nil
tag:0];
// int the split view
NSMutableArray *controllersArray = [NSMutableArray arrayWithArray:self.pTabBarController.viewControllers];
[controllersArray addObject:svc];
[self.pTabBarController setViewControllers:controllersArray];
// cleanup
[nc release];
[rvc release];
[dvc release];
[svc release];
}
- (UISplitViewController*) newSplitViewControllerWithMasterVC:(UIViewController*)masterView
detailVC:(UIViewController*)detailView {
UISplitViewController *svc = [[UISplitViewController alloc] init];
NSMutableArray *controllersArray = [NSMutableArray arrayWithObjects:masterView, detailView, nil];
[svc setViewControllers:controllersArray];
return svc;
}
有人有我的想法嗎? :)
這讓我瘋狂!
請嘗試重新格式化您的代碼。 – Joe 2011-01-20 18:59:12