问题描述
所以我有一个 UITabBarController,它下面有 4 个视图。
具有用于消息的 IBOutlet 标签的那些 ViewControllers 之一(称为 optionsViewController)。我将其用作屏幕上一种可以更新的调试消息。
TabBarController 调用名为 UpdateDeviceStatus 的 optionsViewController 函数
当应用启动时,状态标签在 viewDidLoad 函数中设置为“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;
}
Label在Storyboard中连接,在头文件中连接是(nonatomic,retain)
@property (nonatomic,retain) IBOutlet UILabel *device_status;
如果我们查看 LOG 文件,变量 status
是正确的。但屏幕上的 LABEL 不会更新。我设置了断点,它只进入 viewDidLoad 一次,它进入 UpdateDeviceStatus 一次。
我遗漏了一些明显的东西,stackoverflow ......请帮忙。
解决方法
您是否实现了 UITabBarControllerDelegate 委托?
并检查您的课程是否确认了 TabBarController 委托
此代码可以帮助您
extension <#UIViewController#> : UITabBarControllerDelegate {
override func tabBar(_ tabBar: UITabBar,didSelect item: UITabBarItem) {
}
}
,
我猜“self.device_status”是零。
在这一行设置断点。
self.device_status.text = status;
并检查 self.device_status 是否为零。您可以在 Xcode 的控制台区域输入“po self.device_status”并按“Enter”。
最可能的原因是在加载 optionsViewController 之前调用了 UpdateDeviceStatus。