2010-01-22 3 views
0

J'ai une classe de délégué d'application avec une énumération qui ressemble à ceci:Objective-C, recenseurs et custom setters - Comment le faire fonctionner?

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

De plus, j'ai une propriété pour définir une valeur du recenseur dans mon fichier d'interface:

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

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

@end 

Enfin je le message suivant dans mon dossier de mise en œuvre:

@implementation Communicator2AppDelegate 

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

ma question est la suivante: le message performSelectorOnMainThread ISN ne fonctionne pas car il n'accepte pas '_userStatus' comme valeur. Je suppose que le message suppose que c'est une énumération, pas une valeur réelle. Je reçois le message d'erreur suivant lors de la compilation: "Type incompatible pour l'argument 2 de 'performSelectorOnMainThread: withObject: waitUntilDone.'"

Quelqu'un at-il une idée sur la façon de faire ce travail?

Répondre

1

Vous devez transmettre une valeur d'objet à cette méthode et enum (c'est-à-dire int) est une valeur scalaire. Pour obtenir ce dont vous avez besoin, vous devez envelopper votre entier pour objet obj-c (par exemple NSNumber):

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

Merci accouplent, il est en fait tellement logique que je me demande pourquoi je ne suis pas venu avec moi-même - d'autant plus que la message a en fait un paramètre 'withObject:' :) –