2011-09-16 2 views
0

좋아 네비게이션 컨트롤러 문제, 그래서 나는 다음과 같은 한 : 여기사용자 정의 탭 표시 줄 및

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    MainViewController * tabBarController = [[MainViewController alloc] init]; 
    [self.window addSubview:tabBarController.view]; 
    [self.window makeKeyAndVisible]; 
    [tabBarController release]; 

    [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge| 
    UIRemoteNotificationTypeAlert| 
    UIRemoteNotificationTypeSound]; 

    return YES; 

} 

는 MainViewController는 UITabBarController가 단지 서브 클래스이며, MainViewController의있는 viewDidLoad 안에 내가 가진 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:3]; 

MapViewController * map = [[MapViewController alloc] init]; 
    [localControllersArray addObject:map]; 

    //[localNavigationController release]; 
    [map release]; 


    ListViewController * voteSpot = [[ListViewController alloc] initWithTabBar]; 
    [localControllersArray addObject:voteSpot]; 

    //[localNavigationController release]; 
    [voteSpot release]; 


    ProfileViewController * profile = [[ProfileViewController alloc] initWithTabBar]; 
    [localControllersArray addObject:profile]; 

    //[localNavigationController release]; 
    [profile release]; 


    self.viewControllers = localControllersArray; 
    [localControllersArray release]; 
} 
내가 볼 수있는

지금은 그냥 :

enter image description here

흰색 화면 인 이유는 무엇입니까? 여기

내 initWithTabBar의 예 :

-(id) initWithTabBar { 
    if ([self init]) { 
     [email protected]"Map"; 
    } 
    return self; 
} 

내가 원하는 정확히 수행 일시적으로 하단 탭 표시 줄 (가운데 하나 누락)를 무시 .. 내가 혼란 스러워요 각 탭과 연관된의 ViewController 함께 실제로 MapViewController에는 MapView가 있지만 실제로는 아무 것도 없습니다. 그때가 충돌합니다 모든 탭을 클릭하면 (이 프로그램은 신호를 수신 : EXC_BAD_ACCESS를) int retVal = UIApplicationMain(...)에서

UPDATE : 당신이 그것을 디버깅 할 경우에, 나는 git hub 곳에서 샘플 코드를 업로드 한

전체 프로젝트를 다운로드 할 수 있습니다 (간단한 테스트 프로젝트입니다).

답변

0

컨트롤러를 TabBarControllers viewControllers 속성에 추가해야합니다. 좋아요 :

self.viewControllers = [NSArray arrayWithObjects:map, voteSpot, profile, nil]; 

편집 : 죄송 합니다만, 이미 그 사실을 알았습니다. 그러나 실제 문제에 따라 위의 코드 조각이 실제로 문제를 해결할 수 있습니다.

몇 가지 :

  1. 나는 당신의 localControllersArray의 생성을 볼 수 없습니다. 그것은 자동 번역 되었습니까?
  2. 발생하는 오류는 메모리 문제 (즉, 해제 된 변수에 액세스 중임)를 나타냅니다. 빌드 스키마에서 NSZombieEnabled = YES를 설정하여 정확히 어떤 변수가 문제를 일으키는 지 찾을 수 있습니다.
  3. 저는 개인적으로 app delegate에 View Controller를 만들고 거기에 할당하려고합니다. 내가 viewDidLoad에서 작동해서는 안되는 이유는 없다.

편집 2 : 당신은 할 수 없습니다

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    BaseViewController * tabBarController = [[BaseViewController alloc] init]; 

    NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:3]; 

    //MapViewController * map = [[MapViewController alloc] init]; 
    //UINavigationController* mapNavController = [[[UINavigationController alloc] 
    //            initWithRootViewController:map] autorelease]; 
    //[map release]; 
    //[localControllersArray addObject:mapNavController]; 


    ProfileViewController * profile = [[ProfileViewController alloc] init]; 
    [localControllersArray addObject:profile]; 
    [profile release]; 

    tabBarController.viewControllers = localControllersArray; 
    [localControllersArray release]; 

    self.window.rootViewController = tabBarController; 
    [self.window makeKeyAndVisible]; 
    [tabBarController release]; 
    return YES; 
} 
+0

을 : 을 프로젝트보고 후, 나는 그것을하고 실행하고 applicationDidFinishLaunchingWithOptions 방법을 변경하여 탭 뷰를 보여주는는 다음과 같이 얻을 수 있었다 그 위의 내 코드를 참조하십시오? 그럴 필요가 없다면 각 탭 막대의 제목을 갖지 않을 것입니다. – adit

+0

사과드립니다. 내 대답을 업데이트했습니다. –

+0

샘플 프로젝트를 만들어 GitHub에 업로드했습니다. 도와 주시면 감사하겠습니다. 링크는 게시물 – adit

관련 문제