0

指定したタブに表示されている値を取得しようとしています。以前は機能していたのに、何らかの理由で停止しましたか? 以下のコードのint current_badge =行は、バッジの値が取得される場所であり、実際のバッジの値に関係なくゼロを返します。私は、uitabcontroller から切り離された viewcontroller にいます。私が間違っていることについて誰か考えがありますか?

更新: タブコントローラーから離れたビューコントローラーにいるためと思われます。同じコードをタブ ビュー コントローラーに移動すると、正常に動作します。タブコントローラーから切り離されたときにバッジの値を決定するより良い方法はありますか?

-(void)badgeUpdate:(int)tab:(int)dayspan
{
    // getting the current badge amount
    int current_badge = [[[super.tabBarController.viewControllers objectAtIndex:tab] tabBarItem].badgeValue intValue];

    // testing for badge level
    if (current_badge > 0)
    {
        // testing for updates on tab for dayspan or longer
        int updates_waiting = [self updatesWaitingCheck:tab:dayspan];
        if (updates_waiting > 0)
        {
            // setting new badge level on tab
            [[[[[self tabBarController] viewControllers] objectAtIndex:tab] tabBarItem] setBadgeValue:[NSString stringWithFormat:@"%d", updates_waiting]];
        }
        else
        {
            // turning off badge display
            [[[[[self tabBarController] viewControllers] objectAtIndex:tab] tabBarItem] setBadgeValue:nil];
        }
    }
}
4

1 に答える 1

1

そのタブのコントローラーは、切り替えると割り当てが解除される可能性があります。ビューレイヤーから現在のカウントを決定するロジックを移動し、すべてのタブで持続するより高いレベルのコントローラーに移動することをお勧めします。そうしないと、表示されている問題に遭遇します。

ほとんどの場合、どこかのコントローラーやモデルではなく、ビュー オブジェクトでデータ値を探している場合、フレームワークに対して作業しているため、このような問題に遭遇します。

于 2013-03-03T17:07:01.343 に答える