2010-12-01 5 views
0

해당 생성자에서 실제로 기괴한 결과가 나타납니다. 실제로 어떤 객체도 저장하지 않습니다. 나는 메소드를 디버그했고 저장되는 객체는 제대로 초기화되었다. 이 배열을 사용하여 UITabBarController에서 vc를 설정하고 탭 표시 줄이 비어 있습니다. 코드는 다음과 같습니다.NSArray -initWithObjects : 객체를 저장하지 않습니다.

-(void)initBarItemsWithAllFeatures { 

    /* 
    Issues 
    */ 


    UIImage *issuesImage = [UIImage imageNamed:@"issues_on.png"]; 


    UITabBarItem *issuesTabBarItem = [[UITabBarItem alloc]initWithTitle:NSLocalizedString(@"IssuesTabBarTitle",@"") image:issuesImage tag:0]; 

    [issuesImage release]; 

    issuesNavigationController.tabBarItem =issuesTabBarItem; 

    [issuesTabBarItem release]; 
    /* 
    thumbs 
    */ 

    ThumbsViewController *thumbsViewController = [[ThumbsViewController alloc]initWithNibName:@"ThumbsViewController" bundle:nil]; 


    UIImage *thumbsImage = [UIImage imageNamed:@"thumbs_on.png"]; 

    UITabBarItem *thumbsTabBarItem = [[UITabBarItem alloc]initWithTitle:NSLocalizedString(@"ThumbsTabBarTitle",@"") image:thumbsImage tag:1]; 

    [thumbsImage release]; 

    thumbsViewController.tabBarItem = thumbsTabBarItem; 

    [thumbsTabBarItem release]; 


    /* 
    contents 
    */ 

    ContentsViewController *contentsViewController = [[ContentsViewController alloc]initWithNibName:@"ContentsViewController" bundle:nil]; 

    UIImage *contentsImage = [UIImage imageNamed:@"contents_on.png"]; 

    UITabBarItem *contentsTabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString (@"ContentsTabBarTitle",@"") image:contentsImage tag:2]; 

    [contentsImage release]; 

    contentsViewController.tabBarItem = contentsTabBarItem; 

    [contentsTabBarItem release]; 


    /* 
    search 
    */ 

    SearchViewController *searchViewController = [[SearchViewController alloc]initWithNibName:@"SearchViewController" bundle:nil]; 

    UIImage *searchImage = [UIImage imageNamed:@"search_on.png"]; 

    UITabBarItem *searchTabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString (@"SearchTabBarTitle",@"") image:searchImage tag:3]; 

    [searchImage release]; 

    searchViewController.tabBarItem = searchTabBarItem; 

    [searchTabBarItem release]; 


    /* 
    favourites 
    */ 

    FavouritesViewController *favouritesViewController = [[FavouritesViewController alloc]initWithNibName:@"FavouritesViewController" bundle:nil]; 

    UIImage *favouritesImage = [UIImage imageNamed:@"favourites_on.png"]; 

    UITabBarItem *favouritesTabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString (@"FavouritesTabBarTitle",@"") image:contentsImage tag:4]; 

    [favouritesImage release]; 

    favouritesViewController.tabBarItem = favouritesTabBarItem; 

    [favouritesTabBarItem release]; 

    /* 
    contact 
    */ 

    ContactViewController * contactViewController = [[ContactViewController alloc] initWithNibName:@"ContactViewController" bundle:nil]; 

    UIImage *contactImage = [UIImage imageNamed:@"contact_on.png"]; 

    UITabBarItem *contactTabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString (@"contactTabBarTitle",@"") image:contactImage tag:5]; 

    [contactImage release]; 

    contactViewController.tabBarItem = contactTabBarItem; 

    [contactTabBarItem release]; 



    /* 

    add to an array 

    */ 

    allFeaturesAvailableTabBarItemArray = [[NSArray alloc] initWithObjects: 
              issuesNavigationController, 
              thumbsViewController, 
              contentsViewController, 
              searchViewController, 
              favouritesViewController, 
              contactViewController, nil]; 


    /* 
    release objects 
    */ 

    [thumbsViewController release]; 
    [contentsViewController release]; 
    [searchViewController release]; 
    [favouritesViewController release]; 
    [contactViewController release]; 


} 

미리 감사드립니다.

+0

나에게 좋아 보인다. – Eiko

+0

예. 당신의 문제는 "''initWithObjects :''가 작동하지 않는다는 것 이외의 다른 것입니다. 이 코드의 컨텍스트는 무엇입니까? – Chuck

+0

이 메서드는 applicationDidFinishLaunching에서 호출되어 UITabBarController VC 배열을 NSArray * allFeaturesAvailableTabBarItemArray (앱 대리자의 private 멤버)로 설정합니다. – Pacu

답변

1

배열에서 개체를 하나씩 제거하여 어떤 개체가 문제를 일으키는 지 확인했습니다. 추가 된 첫 번째 객체는 0x0 (nil) 이었으므로 배열에 아무 것도 추가하지 않았습니다. 이상한 것은

issuesNavigationController.tabBarItem =issuesTabBarItem; 

에 내가 전무 객체에 속성을 호출 할 어떠한 경보를 해고 야한다는 것입니다. 이것이 "예상"인가, 아니면 내가보고해야 할 종류의 버그입니까?

빠른 답변을 보내 주신 모든 분들께 진심으로 감사드립니다. 나는 과감한 관리도 할 것입니다. 고마워요!

+0

속성을 호출하는 것은 setter 및 getter를 호출하기위한 문법적 설탕 일뿐입니다. 객체에서 속성을 호출하면 메시지를 보냅니다. Objective-C에서'nil'에 메시지를 보내는 것이 항상 안전하기 때문에 이것은 예상 된 동작입니다. – Abizern

1

나는 당신이 탭 바 이미지 (FWIW)를 넘겨 준 것 같아.

+0

예. + imageNamed : 자동 회수 된 객체 (alloc, new 또는 retain가 아니며 사본이 포함되지 않음)이기 때문에 배열에 추가 한 후에 이미지를 놓아서는 안됩니다. –

관련 문제