【问题标题】:iOS Label Not UpdatingiOS 标签未更新
【发布时间】:2021-06-25 02:30:34
【问题描述】:

所以我有一个 UITabBarController,它下面有 4 个视图。

其中一个具有 IBOutlet LABEL 用于消息的 ViewController(称为 optionsViewController)。我将其用作屏幕上的一种调试消息,我可以更新。

TabBarController 调用名为 UpdateDeviceStatus 的 optionsViewController 函数

应用启动时,在 viewDidLoad 函数中,STATUS 标签设置为“BLAH”。

但是当 TabBarController 调用 UpdateDeviceStatus 时,标签并没有更新。

@synthesize device_firmware_version, device_status;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.device_status.text = @"BLAH";
}

- (void) UpdateDeviceStatus:(NSString *)status
{
    NSLog(@"Updating Status: %@", status);
    self.device_status.text = status;
}

Storyboard中的Label是连接的,头文件中的连接是(nonatomic, retain)

@property (nonatomic, retain) IBOutlet UILabel *device_status;

如果我们查看 LOG 文件,变量 status 是正确的。但是屏幕上的 LABEL 没有更新。我设置了断点,它只会进入一次viewDidLoad,它会进入一次UpdateDeviceStatus。

我遗漏了一些明显的东西,stackoverflow....请帮助。

【问题讨论】:

    标签: ios objective-c uiviewcontroller uitabbarcontroller


    【解决方案1】:

    我猜“self.device_status”是零。

    在这一行设置断点。

    self.device_status.text = status;
    

    并检查 self.device_status 是否为零。您可以在 Xcode 的控制台区域输入“po self.device_status”并按“Enter”。

    最可能的原因是在 optionsViewController 加载之前调用了 UpdateDeviceStatus。

    【讨论】:

    • 您是正确的,在 UpdateDeviceStatus 中 self.device_status 实际上为零。我只是不确定为什么它没有被保留。当 viewDidLoad 被调用时 device_status 在屏幕上正确更新。但如果稍后在应用程序中调用 UpdateDeviceStatus,self.device_status 为 nil。我将不得不追捕这一点。感谢您为我指明正确的方向。稍后会更新更多。
    • 是的,结果 device_status 为 nil。感谢您为我指明正确的方向。
    【解决方案2】:

    你实现了 UITabBarControllerDelegate 委托吗?

    并检查您的班级是否确认 TabBarController 委托

    这段代码可以帮助你

    extension <#UIViewController#> : UITabBarControllerDelegate {
      override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    
      }
    }
    

    【讨论】:

    • 感谢您的提示。等我有答案后会更新。
    猜你喜欢
    • 2016-06-03
    • 2021-12-15
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    相关资源
    最近更新 更多