2013-03-03 64 views
0

我试图检索显示指定选项卡的值。它之前在工作,并因某种原因停止了?下面的代码中的int current_badge =行是获取徽章值并返回零的位置,而不管徽章实际值是什么。我处于一个视图控制器,它被一个uitabcontroller隔离。任何人有任何想法我做错了什么?iOS - 从选项卡中检索到不正确的徽章值

更新:这似乎是因为我在一个tab控制器的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]; 
     } 
    } 
} 
+0

这不是一个xcode问题,它是一个iOS问题,所以我更改了标签和标题。 – 2013-03-03 17:04:52

+0

感谢您的更正 – Grymjack 2013-03-03 17:16:06

回答

1

该选项卡的控制器很可能在您切换时解除分配。我会建议移动逻辑来确定当前计数从视图层,并进入一个更高级别的控制器,持续所有标签。否则,你会遇到你看到的问题。大多数情况下,如果您在查看对象而不是控制器或模型中查找数据值,那么您正在对付框架,并且会遇到像这样的问题。

+0

我有TabBarController类的代码工作正常。当我进行模式转换到屏幕时,它停止工作。当我退出这个屏幕回到标签控制器,它工作正常。它没有被释放,因为当我展开segue时,我没有任何问题返回到tab控制器。所以我想我的问题是,当我陷入另一个视图时,如何获得标签的徽章值? – Grymjack 2013-03-03 17:13:13

+1

控制器仍然可以在低内存条件下解除分配,然后从串行状态重新创建;类似于应用切换的工作速度。不活动的控制器是否保持分配可能会根据其运行的设备,iOS的版本以及用户是否在后台播放音乐而改变。这就是为什么最好将这些数据存储在像应用程序委托那样的高级持久对象中。 (请注意,我不是_suggesting_应用程序代表是这个的地方 - 组织这取决于你) – 2013-03-03 17:21:17

+0

似乎奇怪的代码不会抛出尝试访问徽章值的访问错误呢?那么,你的建议是将这些代码移回tab控制器,并在退出segue时运行它? – Grymjack 2013-03-03 17:27:38

相关问题