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

时间:2013-04-09 14:57:34

标签: ios rotation uilabel viewcontroller

我是iOS开发的新手,并试图弄清楚这里发生了什么。我有一个带有多个ViewControllers和类的标签栏应用程序。我的一个课程被调用并更新了工作正常的uilabels。然后调用另一个类,它也运行一个后台循环,用于更新同一个ViewController上的其他一些uilabel,它们用循环中的第一个条目更新一次,但是当循环在后台运行时不会。我可以看到循环仍在运行,细节正在改变,因为我使用NSLog记录输出。

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

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

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

由于

以下是循环类: -

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

    }

1 个答案:

答案 0 :(得分: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的视图部分,MVC中的控制器。


<击> 加载视图后,永远不会再调用-(void)viewDidLoad。这适用于UITabBarController

中的所有观看次数

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

相关问题