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

這種改變標籤所有的時間和用戶可以看到應用程序的工作。