2011-02-10 64 views
0

我試圖改變一個UILabel的排列在主線程這樣使用UITextAlignmentCenter與@selector

[updateLabel performSelectorOnMainThread:@selector(setTextAlignment:) withObject:UITextAlignmentCenter waitUntilDone:YES]; 

然而,這產生一個「時將整數指針,未投的錯誤。什麼是正確的方法這樣做嗎?

+0

`updateLabel.textAlignment = UITextAlignmentCenter;` 原因何在? – knuku 2011-02-10 14:04:53

+0

我需要調用主線程而不是當前線程的選擇器 – Aeolai 2011-02-10 14:13:34

回答

0

這是行不通的,因爲UITextAlignmentCenter不是指向一個對象,但一個簡單的整數。一種解決方案是實現經由updateLabel.textAlignment = UITextAlignmentCenter;設置對準到中心視圖控制器上的自己的方法和調用[yourViewController performSelectorOnMainThread:@selector(setUpdateLabelTextAlignmentToCenter) withObject:nil waitUntilDone:YES];

0

你正在傳遞一個原始整數到「withObject」而不是一個對象,這就是爲什麼你會得到這個錯誤,而是你可以在執行這個任務的主線程上調用你自己的選擇器爲你傳遞包含要更改的UILable對象的字典或數組,並將新的對齊值打包爲NSNumber:

- (void) changeLabelAlignment:(NSArray *)argsArray 
{ 
    UILabel *lbl = [argsArray objectAtIndex:0]; 
    int alignment = [[argsArray objectAtIndex:1] intValue]; 
    lbl.textAlignment = alignment; 
} 

調用這樣說:

... 
NSArray *argsArray = [NSArray arrayWithObjects:label, [NSNumber numberWithInt: UITextAlignmentCenter], nil]; 
[myClassObject performSelectorOnMainThread:@selector(changeLabelAlignment:) 
            withObject:argsArray 
           waitUntilDone:YES];