如何更改循环内的标签

时间:2013-10-23 14:00:26

标签: objective-c grand-central-dispatch

我正在进行ipad应用,在mi代码中,我在一个大循环中同步所有数据,我想要更改标签的值,为此我有这个

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
        dispatch_sync(queue, ^{
            UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
            myLabel.text = [issue objectForKey:@"title"];
            [self.avisoSync addSubview:myLabel];

        });

问题是,如果我在这一点停止代码并逐步移动,我会看到带有值的标签,但是如果代码运行我什么也看不到。

如何一直更改此变量,并在视图中查看更改?

任何想法

2 个答案:

答案 0 :(得分:4)

除了主队列之外,不应该触摸任何UI对象。您发布的代码除了添加标签之外没有做任何事情,因此我不确定您要实现的目标,但我会假设您正在该块中执行其他操作而不会出于任何原因向我们展示。我强烈建议您在将代码放入使用它的应用程序之前阅读Apple的GCD docs;虽然非常强大,但它很容易让你很快陷入困境。

  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
    dispatch_async(queue, ^{
      // Do some work

      dispatch_async(dispatch_get_main_queue(), ^{
        // Only touch the UI from a block enqueued on the main queue
        UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 100)];
        myLabel.text = [issue objectForKey:@"title"];
        [self.avisoSync addSubview:myLabel];
    });
  });

答案 1 :(得分:0)

大家好,我终于找到了将值设置为标签并向用户显示的解决方案,我尝试了解决方案@RyanR谢谢,但没有为我工作。

在我的循环中,用户可以看到一个视图,但循环非常大,用户在几秒钟内看不到任何变化。所以看起来应用程序正在停止。

所以我发现并尝试了这个并且工作

self.loadInfo.text= [NSString stringWithFormat:@"Create Projects %@",[project objectForKey:@"name"]];
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];

这会一直更改标签,用户可以看到应用程序正在运行。