【问题标题】:iOS - incorrect badge value retrieved from tabiOS - 从选项卡中检索到的徽章值不正确
【发布时间】:2013-02-17 17:43:39
【问题描述】:

我正在尝试检索为指定选项卡显示的值。它以前工作过,但由于某种原因停止了?下面代码中的int current_badge = 行是获取徽章值的位置,并且无论徽章值实际是什么都返回零。我在一个与 uitabcontroller 分离的视图控制器中。有人对我做错了什么有任何想法吗?

更新:这似乎是因为我在标签控制器之外的视图控制器中。将相同的代码移动到选项卡视图控制器中,它工作正常。有没有更好的方法来确定 tabcontroller 中的徽章值?

-(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];
        }
    }
}

【问题讨论】:

  • 这不是 xcode 问题,这是 iOS 问题,所以我更改了您的标签和标题。
  • 感谢指正

标签: iphone ios uitabbarcontroller badge


【解决方案1】:

当您切换离开时,该选项卡的控制器可能会被释放。我建议将确定当前计数的逻辑移出视图层,并将其移至在所有选项卡中持续存在的更高级别的控制器中。否则,您将遇到您所看到的问题。

大多数时候,如果您要在视图对象中查找数据值,而不是在某个控制器或模型中查找数据值,那么您是在针对框架工作,您会遇到这样的问题。

【讨论】:

  • 我有 TabBarController 类,这段代码可以正常工作。当我对屏幕进行模态转换时,它停止工作。当我将此屏幕退出到选项卡控制器时,它工作正常。它不会被释放,因为当我展开 segue 时,我会毫无问题地返回选项卡控制器。所以我想我的问题是当我进入另一个视图时如何获得标签的徽章值?
  • 控制器仍然可以在内存不足的情况下被释放,然后从序列化状态重新创建;类似于应用程序切换的速度。非活动控制器是否保持分配状态可能会根据它在哪个设备上运行、哪个版本的 iOS 甚至用户是否在后台播放音乐而改变。这就是为什么最好将这些数据存储在像您的应用程序委托这样的高级持久对象中。 (请注意,我不是建议应用程序代表是这个地方 - 这个组织是由你决定)
  • 看起来很奇怪,代码在尝试访问徽章值时不会引发访问错误?那么,您是否建议将此代码移回选项卡控制器并在退出 segue 时运行它?
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多