gpt4 book ai didi

iOS ViewController uilabel 仅在标签栏应用程序中旋转时更新

转载 作者:行者123 更新时间:2023-11-29 04:00:32 25 4
gpt4 key购买 nike

我是 iOS 开发新手,试图弄清楚这里发生了什么。我有一个带有多个 ViewController 和类的选项卡栏应用程序。我的一个类被调用并更新了 uilabels,效果很好。然后调用另一个类,它也运行一个后台循环,该循环旨在更新同一 ViewController 上的一些其他 uilabel,它们会随着循环中的第一个条目更新一次,但不会在循环仍在后台运行时更新。我可以看到循环仍在运行,并且当我使用 NSLog 记录输出时,详细信息正在发生变化。

ViewController 还支持旋转,如果我旋转屏幕,则循环中的数字将被绘制到 uilabel 并固定,直到我再次旋转屏幕,即如果我将循环设置为计数到 5 然后重置,具体取决于在循环中我旋转屏幕的位置将取决于将 1 到 5 之间的哪个数字绘制到 uilabel。

在单个 ViewController 应用程序上,这工作正常,循环运行并且 uilabels 按预期实时更新。

从 [super viewDidLoad] 调用更新 uilabel 的类。

谢谢

这是带有循环的类:-

 + (void)Loop:(FirstViewController *)vc

{
NSLog(@"start");


static NSUInteger counter1 = 0;
NSLog(@"with count %d", counter1);

counter1++;
NSLog(@"count ++ %d", counter1);

NSString *label01 = [NSString stringWithFormat: @"%d", counter1];

//update uilabel
vc.cha01.text = label01;

if (counter1 >= 5) {

counter1 = 0;

}


// run loop with 1 second delay
[self performSelector:@selector(Loop:) withObject:nil afterDelay:1];

}

最佳答案

你的循环是错误的,第一次你传递了viewController,但是当你调用performSelector:withObject:afterDelay:时,你传递了nil

因此 vc 参数将为 nil,只需传递 vc 参数即可:

   // run loop with 1 second delay
[self performSelector:@selector(Loop:) withObject:vc afterDelay:1];

提示一下,您应该使用自定义对象来保存数据,然后在 - (void)viewDidAppear:(BOOL)animated 中读出值并设置标签。UIViewController 可以卸载以释放内存,这可能会导致您的代码出现问题。

只需使用 MVC 解决方案,即在您的案例中保存数据和字符串的模型。然后在de UIViewController(MVC中的 Controller )中设置标签(MVC的 View 部分)。


<罢工>一旦 View 被加载,-(void)viewDidLoad 就不会再被调用。这适用于 UITabBarController 中的所有 View 。

您应该将更新标签的代码移至 - (void)viewDidAppear:(BOOL)animated 方法。

关于iOS ViewController uilabel 仅在标签栏应用程序中旋转时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15905384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com