2010-01-22 24 views
0

我有一個應用程序委託類與枚舉它看起來像這樣:Objective-C,枚舉和定製setter - 如何使它工作?

typedef enum { 
    Online = 3500, 
    DoNotDisturb = 9500, 
    Offline = 18500, 
    Away = 15500, 
    Busy = 6500, 
    BeRightBack = 12500 
} status; 

另外我有一個屬性來設置從枚舉值在我的接口文件:

@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 
    status userStatus; 
} 

@property (nonatomic, setter=setStatus) status userStatus; 

@end 

最後我有我在執行文件中的下列信息:

@implementation Communicator2AppDelegate 

- (void)setStatus:(status)_userStatus { 
    if ([NSThread isMainThread]) { 
     // some stuff happens here ... 
    } else { 
     [self performSelectorOnMainThread:@selector(setStatus:) withObject:_userStatus waitUntilDone:NO]; 
    } 
} 

我的問題是:在performSelectorOnMainThread消息ISN不工作,因爲它不接受'_userStatus'作爲值。我的猜測是這條消息假設它是一個枚舉,而不是真正的價值。編譯時出現以下錯誤消息:「performSelectorOnMainThread:withObject:waitUntilDone。」的參數2的不兼容類型「

有沒有人對如何使這項工作有任何想法?

回答

1

您需要將一個對象值傳遞給此方法,並且枚舉(即int)是標量值。爲了達到你需要什麼,你必須換到OBJ-C對象(例如NSNumber的)你的整數:

- (void)setStatus:(status)_userStatus { 
    if ([NSThread isMainThread]) { 
     // some stuff happens here ... 
    } else { 
     [self performSelectorOnMainThread:@selector(setStatus:) withObject:[NSNumber numberWithInt:_userStatus] waitUntilDone:NO]; 
    } 
} 
+0

感謝隊友,它實際上是這樣的邏輯,我不知道爲什麼我沒有拿出它自己 - 尤其是因爲消息實際上有一個參數'withObject:':) –