내 앱에 탭 막대 컨트롤러가 있고 탭 항목 중 하나가 분할보기 컨트롤러입니다. 마스터보기 컨트롤러 (즉, 인덱스 0)는 펜촉에서로드 된 네비게이션 컨트롤러입니다.메모리 부족 경고로 내보기가 사라지는 이유는 무엇입니까?
조금 흐릿한 것으로 들리지만 1) IB의 TBC에 SVC를 추가 할 수없고 2) iOS 4.2 splitview-navbar-colorTint 버그가있는 조합으로 분류됩니다. 그리고 어제는 어제 해결 방법을 구현 한 이후로 메모리 부족 경고로 인해 문제가 발생했습니다.
해결 방법 전에 2 개의 nav 컨트롤러를 사용하여 SVC를 설치하고 TBC에 프로그래밍 방식으로 (IB 탭 제한으로 인해 IB의 제한 사항으로 인해) SVC를 추가했지만 문제가 없으면 - 그 사과 버그를 제외하고는.
작은 workaround demo도 메모리 부족 경고 이후에도 정상적으로 작동합니다. 그러나 탭 표시 줄의 추가 오버 헤드는 포함되지 않습니다.
그러나 my adaption of the workaround demo에서는 모두 배 모양이 시작됩니다. 분할보기를 표시하는 동안 메모리 부족 경고를 보내면 왼쪽 전체 (마스터보기)가 사라집니다. 실제로 장치에서 동일한 동작을 처음 발견했습니다.
나는 무슨 일이 일어 났는지 의문입니다. 디스플레이상의 뷰 (nav cont의 루트 뷰)는 테이블 뷰 서브 클래스에 의해 제어됩니다. didReceiveMemoryWarning을 재정의했지만 도움이되지 않습니다. 게다가 (이에 상응하여!) superview는 0이 아닙니다. 그것은 UITableView입니다. 완벽하게 수정하십시오.
그래서 Nav 컨트롤러가 출시 될 예정입니다. 그러나 어디에서? 왜 원래 데모에 없었습니까? 차이점은 이제 내 탭 막대 컨트롤러 추가입니다. 탭 바에 추가하는 코드는 다음과 같습니다.
- (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