0

我正在做一个 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];

        });

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

如何始终更改此变量,并在视图中查看所有更改?

任何想法

4

2 回答 2

4

除了主队列之外,您永远不应该从任何地方触摸 UI 对象。您发布的代码除了添加标签外什么也没做,所以我不确定您要实现什么,但我假设您在该块中执行其他操作,并且出于任何原因没有向我们展示。我强烈建议在将代码投入使用它的应用程序之前阅读 Apple的GCD 文档;虽然非常强大,但它很容易让自己迅速陷入糟糕的境地。

  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];
    });
  });
于 2013-10-23T14:07:42.073 回答
0

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

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

所以我找到并尝试了这个并工作

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

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

于 2013-10-25T07:12:30.090 回答