Можно ли передать переменную в действие NSMenu?

Я динамически создаю меню на основе массива, и есть подменю, связанное с IBAction, которое открывает папку в Finder. Папка, которую он открывает, основана на свойстве объекта в моем исходном массиве.

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

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

e.g.

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

person Coderama    schedule 08.03.2012    source источник


Ответы (2)


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

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

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

person Michael Dautermann    schedule 08.03.2012

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

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);
person Coderama    schedule 08.03.2012
comment
ах, так вы использовали мое решение (доступ к свойствам объекта). хорошо! - person Michael Dautermann; 08.03.2012