2010-06-19 13 views
3

J'ai une question sur la façon d'utiliser un sélecteur avec plusieurs paramètres. Je dois passer ceci:Cocoa Selector Question

-(void)openBackupNamed:(NSString *)name

utilisant ceci:

[backupList addItemWithTitle:file action:@selector(openBackupNamed:) keyEquivalent:@""]; 

Je sais qu'il ya le paramètre withObject: pour ces cas, mais je ne peux pas le faire dans le addItemWithTitle:action:keyEquivalent: méthode ou suis-je manque quelque chose?

Merci

Répondre

4

Dans votre cas, vous devez créer un nouvel objet NSInvocation et le mettre de l'index 2 paramètres à votre NSString (Les 0 et 1 paramètres indexés sont réservés).

Exemple:

// Assuming: 
NSString *myString = ...; 

/*/*/ 

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(openBackupNamed:)]]; 
[invocation setSelector:@selector(openBackupNamed:)]; 
[invocation setTarget:self]; 
[invocation setArgument:&myString atIndex: 2]; 

[invocation invoke]; // or use invokeWithTarget: instead of the above setTarget method. 

Lire l'ADC NSInvocation Class Reference

S'il vous plaît l'esprit le message setArgument. Vous devez lui passer le adresse de votre paramètre (votre chaîne), pas l'objet lui-même.

+0

comment puis-je obtenir l'adresse de l'objet? – Pripyat

+0

utiliser l'opérateur & (lire: adresse de), il est dans l'exemple que j'ai posté. Je suppose que j'aurais dû le rendre plus évident. –

+0

oh droite je vois! Je l'aurais obtenu à l'aide du descripteur% p, na pas savoir de l'opérateur et - merci! – Pripyat