2013-10-23 78 views
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]; 

     }); 

的问题是,如果我在这一点上停止代码和一步一个脚印我看到的价值标签,但如果代码来看,我看不到任何东西。

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

任何想法

+0

您需要详细说明。如果这是一个循环,你不会改变任何值。您在相同的坐标处反复创建一个新的'UILabel'。你确定这是你想要的吗? – Desdenova

回答

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]; 
    }); 
    }); 
0

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

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

于是我发现,试试这个,工作

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

这种改变标签所有的时间和用户可以看到应用程序的工作。