У меня есть приложение для какао, основанное на документе, с элементом в меню приложения, подключенным к IBAction
. Щелчок на элементе должен выполнить задачу, которая использует IBOutlet
в основном файле nib, который использует другой класс, MyDocument
. Создание 2 объектов одного класса, по одному в каждом нибе, кажется, не работает. Как я могу получить доступ к розетке?Доступ к IBOutlet из других классов
ответ
Действия для пунктов меню часто отправляются первому ответчику, так что все, что в настоящее время выбрано, может воздействовать на него.
Похоже, что это действие работает над текущим документом, тогда оно должно быть реализовано документом. В этом случае меню отправляет свое действие первому ответчику, а затем помещает метод действия в класс MyDocument.
Если действие, которое вы пытаетесь отправить, является обычным: в главном меню выберите пункт «Первый ответчик», добавьте имя метода, затем подключите селектор элемента к действию.
Прочтите раздел Responders раздела Cocoa Event-Handling Guide для получения дополнительной информации.
Спасибо, что он отлично работает! – nosedive25
Чтобы суммировать вышесказанное, в вашем файле NIB/XIB, в построителе интерфейса сделайте соединение с объектом первого ответчика, а не с владельцем файлов или чем-либо еще. Вам по-прежнему будут предложены освещенные действия в отношении потенциальных первых респондентов.
Какао затем берет этот селектор и ищет его, начиная с NSView (если есть), который в настоящее время является первым ответчиком, а затем с помощью NSDocument, который в настоящее время используется, а затем с его оконным контроллером и т. Д. И т. Д. Вплоть до Участник приложения. Первый объект, который он проверяет, фактически реализует этот метод, будет использовать этот объект (после проверки его с тем же объектом).
Итак:
@interface MyDocumentTypeA : NSDocument {
}
-(void)myMenuAction:(id)sender;
-
@interface MyDocumntTypeB : NSDocument {
}
// -myMenuAction: not implemented here
-
@interface MyApplicationDelegate ... {
}
-(void)myMenuAction:(id)sender;
-
В строителе Interface (или даже программно), если вы связали " действие "пункта меню на селектор с именем «myMenuAction:» на первом ответчике (который приравнивается к тому, чтобы не указывать цель при выполнении программно), для вышеуказанных двух подклассов документов произойдет следующее.
Для MyDocumentTypeA, когда пользователь выбирает этот пункт меню, MyDocumentTypeA -myMenuAction: будет вызываться. Поскольку MyDocumentTypeB не реализует это действие, Cocoa будет продолжать искать цепочку ответчиков до тех пор, пока не получит делегат приложения, который его реализует, поэтому вместо этого он будет вызываться здесь.
Если Cocoa не находит объектов в цепочке ответчиков, реализующих метод, элемент меню остается отключенным.
Как вы «подключаетесь к объекту первого ответчика»? – Shamoon
Существует способ, как сделать это, я отправил ответ в подобной теме: Access IBOutlet from other class (ObjC)
- 1. Доступ к IBOutlet от других контроллеров View
- 2. Доступ к закрытым членам из других классов
- 3. Доступ к переменным из других общедоступных классов
- 4. Доступ к переменным из других классов
- 5. Доступ к данным из других классов
- 6. Доступ к «currentState» из других классов?
- 7. Доступ к переменным из других классов
- 8. Доступ к свойствам MainWindow из других классов
- 9. Доступ к/Использование вложенных классов из других классов C#
- 10. C++ Доступ к открытому члену других классов
- 11. C++ частный доступ к членам других классов
- 12. доступ к кнопке IBOutlet от других контроллеров представления
- 13. Доступ к IBOutlet из другого класса?
- 14. Доступ к IBOutlet из другого ViewController
- 15. Доступ к свойствам IBOutlet из другого класса
- 16. Доступ к содержимому IBOutlet из другого класса
- 17. Swift Доступ к IBOutlet из другого класса
- 18. Доступ к IBOutlet из другого класса
- 19. Доступ к IBOutlet из делегата другого класса
- 20. Доступ к IBOutlet другого класса
- 21. Доступ к частной переменной из других классов в Java
- 22. Доступ к методу из других классов Цель-C
- 23. Как получить доступ к инструментам формы из других классов
- 24. Является ли стандартом доступ к статическому методу из других классов?
- 25. Доступ к объектам, сделанным в основном методе из других классов
- 26. Доступ к функции в классе из других классов
- 27. Как получить доступ к переменной «Текущий экран» из других классов?
- 28. IPHONE Как получить доступ к переменным из других классов/viewcontrollers
- 29. Доступ к объектам из других классов в ASP.NET (VB)
- 30. Как получить доступ к синглету из других классов C++
Вам нужно уточнить, что подключили к чему. Это не ясно из вашего описания. –