Как получить доступ к свойствам (название, состояние и т. д.) переменных экземпляра из метода класса другого файла реализации? Я попробовал @synthesize, но не смог заставить его работать. Чтобы быть более точным; Мне нужно получить доступ к IBOutlets класса NSWindowController.
Как получить доступ к ivar из метода класса другого файла реализации
Ответы (3)
Прежде всего, вы должны прочитать эту главу раньше.
Введение в язык программирования Objective-C.
Что именно вы хотите знать. Очевидно, что вы не можете получить доступ к переменной экземпляра без экземпляра. Метод класса — это статический метод (сообщение), к которому вы можете получить доступ без какого-либо экземпляра объекта. Не могли бы вы уточнить свой вопрос, Дэвид?
Хорошо, тогда вам просто нужно объявить свои свойства в интерфейсе класса. Ваши переменные экземпляра имеют префикс IBOutlet, чтобы указать, что они должны быть установлены с помощью пера. Может быть, вы уже знаете все эти вещи. Извините в таком случае.
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MyClass.h file
*/
@interface MyClass
{
// instance vars
IBOutlet NSString *title; // Do you have this ? Should be bind in IB.
}
// and this to declare the accessors as public methods
@property (nonatomic, retain) NSString *title;
/*
other methods signature declaration
*/
@end
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MyClass.m file
*/
@implementation MyClass
@synthesize title; // allow to generate the accessors of your property
/*
methods implementation here
*/
@end
Если вы создаете экземпляр своего класса, просто вызовите метод доступа [myObjectOfMyClass title]. Возможно, вы увидите шаблон проектирования singleton, который является одним из наиболее часто используемых и полезных для простого извлечения экземпляра объекта, который должен быть уникальным. Как выглядит ваш синглтон Objective-C?
Винсент Згеб
Я обычно использую свой контроллер приложения в качестве посредника для вещей, которые мне нужны, доступными во всех моих классах… предполагая, что ваш контроллер приложения также является делегатом вашего приложения. Из любого класса я могу получить доступ к своему контроллеру приложения (делегат приложения), используя [делегат NSApp].
Имея это в виду, я удостоверяюсь, что мой appcontroller создает экземпляры таких вещей, как оконные контроллеры. Затем, если мне нужно получить доступ к оконному контроллеру, я создаю для него переменную экземпляра в своем контроллере приложения, а затем создаю метод доступа для этой переменной экземпляра. Например:
в appcontroller.h:
MyWindowController *windowController;
@property (readonly) MyWindowController *windowController;
в appcontroller.m:
@synthesize windowController;
Затем из любого класса я могу получить доступ к этому экземпляру оконного контроллера, используя:
MyWindowController *windowController = [[NSApp delegate] windowController];