2012-03-08 2 views
4

Я динамически создаю меню на основе массива, и есть подменю, связанное с IBAction, которое открывает папку в Finder. Открываемая папка основана на свойстве объекта в моем первоначальном массиве.Можно ли передать переменную в действие NSMenu?

Есть ли способ связать действие NSMenuItem с IBAction и передать в эту переменную каталога, поскольку я динамически создаю этот массив?

ИЛИ должен ли я идти в IBAction и разрешать каталог, ссылаясь на NSMenuItem на массив?

например.

person = [[Person alloc] init]; 
// person is assigned 
subMenu = [[NSMenu alloc] init]; 
[subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""]; 

ответ

3

Действие принимает только параметр «(id) sender», где объект, который называется действие, как предполагается, будет отправлено.

Но если ваш метод действия живет в объекте Objective C (а не в одиночном или любом другом), вы можете легко ссылаться на свойства этого объекта из своего действия.

Надеюсь, это ясно для вас или нет, покажите немного своего кода IBAction и сообщите нам, где он живет и как он объявлен.

3

Это то, что я был после.

NSMenuItem *menuItem; 
menuItem = [subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""]; 
[menuItem setRepresentedObject:person]; 

Тогда в моем IBAction я сделал что-то вроде этого, чтобы извлечь папку:

- (IBAction)openDirectory:sender { 
    Person *person = [sender representedObject]; 
    NSLog(@"directory: %@",person.directory); 
+0

ах, так что вы действительно использовали мое решение (доступ к свойствам объекта). хорошо! –