2010-11-12 60 views
0

我有一個方法,在一個單獨的線程上執行一個循環。對於我的程序工作,我稱使用這種方法的原因,我如何在UILabel中循環顯示字符?

[self performSelectorInBackground:@selector(myMethod:) withObject:arg]; 

和實際的方法,

- (void)myMethod:(NSString *)arg { 
    NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
    for (int i = 0; i < [arg length]; i++) { 

    unichar ch = [arg characterAtIndex:i]; 
    NSLog(@"Processing character %c",ch); 

    NSString *currentChar = [[NSString alloc] initWithFormat:@"%c", ch]; 
    viewController.outputLabel.text = currentChar; 
    [currentChar release]; 


    switch (ch) { 
    //Do my stuff 
    } 

    [pool release]; 

} 

現在我的問題是,只有那些被處理的最後一個字符被顯示在我的UILabel,但是當我在運行程序時檢查我的控制檯時,由於正在處理字符,它們將逐個顯示到控制檯(使用NSLog)。這正是我希望在我的標籤中看到的行爲。

另外我應該告訴你,每次我在處理一個字符時(在switch語句中)至少有一點延遲,因爲我至少需要調用[NSThread sleepForTimeInterval:delayTime];幾次。

回答

5

您試圖從主線程以外的線程更新視圖(您的「outputLabel」),這是不允許的。

您需要強制更新從主線程發生。你可以通過調用

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait 

所以,像這樣做:

[viewController.outputLabel performSelectorOnMainThread: @selector(setText:) withObject: currentChar waitUntilDone: YES]; 
+0

作品完美地感謝! – cgossain 2010-11-12 20:26:41