2010-06-19 49 views
3

我有一個關於如何使用多參數選擇器的問題。我需要切換此:可可選擇問題

-(void)openBackupNamed:(NSString *)name

使用此:

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

我知道有這些情況的withObject:參數,但我不能在這樣做addItemWithTitle:action:keyEquivalent:方法還是我錯過了什麼?

感謝

回答

4

你的情況,你必須創建一個新的NSInvocation的對象和它的指數2參數設置爲你的NSString(在0-1索引參數被保留)。

例子:

// 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. 

閱讀ADC NSInvocation Class Reference

請介意setArgument消息。您必須將參數(字符串)的地址傳遞給它,而不是實際的對象本身。

+0

我怎樣才能得到對象的地址? – Pripyat 2010-06-19 19:09:24

+0

使用&運算符(閱讀:地址),它在我發佈的示例中。我想我應該更明顯一些。 – 2010-06-19 19:10:59

+0

哦,我明白了!我會用%p描述符得到它,不知道&運算符 - 謝謝! – Pripyat 2010-06-19 19:13:20