2010-12-01 14 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

このメソッドは、アプリケーションデリゲートのプライベートメンバーであるNSArray * allFeaturesAvailableTabBarItemArrayを使用してUITabBarController VC配列を設定するためにapplicationDidFinishLaunchingで呼び出されます。 – Pacu

答えて

1

アレイのオブジェクトを1つずつ削除して、どのオブジェクトが問題を引き起こしているかを確認しました。追加された最初のオブジェクトは0x0(nil)でしたので、配列に何も追加しませんでした。奇妙なことが

issuesNavigationController.tabBarItem =issuesTabBarItem; 

に私がnilオブジェクトのプロパティを呼び出し、何のアラームを発射していないんだということです。これは「期待」ですか、それとも報告すべきバグですか?

皆さん、本当にありがとうございます。 私はまた、大過剰の世話をするつもりですありがとう!

+0

プロパティの呼び出しは、セッターとゲッターを呼び出すための文法的な砂糖です。オブジェクトのプロパティを呼び出すと、メッセージが送信されます。 Objective-Cでは 'nil'にメッセージを送るのは常に安全なので、これは予想される動作です。 – Abizern

1

あなたはタブバー画像(FWIW)を公開していないかもしれないと思います。

+0

はいそうです。 + imageNamed:自動解放されたオブジェクトです(alloc、new、retainのいずれもコピーを含まず)ので、イメージを配列に追加してから解放してはいけません。 –

関連する問題