Как получить доступ к ivar из метода класса другого файла реализации - PullRequest
2 голосов
/ 01 апреля 2010

Как мне получить доступ к свойствам (title, state, ...) переменных экземпляра из метода класса другого файла реализации? Я попробовал @synthesize, но не смог заставить его работать. Чтобы быть более точным; Мне нужно получить доступ к IBOutlets класса NSWindowController.

Ответы [ 3 ]

1 голос
/ 01 апреля 2010

Прежде всего, вы должны прочитать эту главу раньше.

Введение в язык программирования Objective-C .

Что вы хотите точно знать. Очевидно, что вы не можете получить доступ к переменной экземпляра без экземпляра. Метод класса - это статический метод (сообщение), к которому вы можете обращаться без какого-либо экземпляра объекта. Не могли бы вы уточнить свой вопрос, Дэвид?

0 голосов
/ 02 апреля 2010

Я обычно использую свой appcontroller в качестве посредника для вещей, которые мне нужны доступны во всех моих классах… при условии, что ваш appcontroller также является делегатом вашего приложения. Из любого класса я могу попасть в свой appcontroller (делегат приложения), используя [NSApp делегат].

Имея это в виду, я проверяю, что мой appcontroller создает такие вещи, как оконные контроллеры. Затем, если мне нужно получить доступ к контроллеру окна, я создаю переменную экземпляра для него в моем appcontroller, а затем создаю метод доступа для этой переменной экземпляра. Например:

в appcontroller.h:

MyWindowController *windowController;
@property (readonly) MyWindowController *windowController;

в appcontroller.m:

@synthesize windowController;

Тогда из любого класса я могу добраться до этого экземпляра контроллера окна, используя:

MyWindowController *windowController = [[NSApp delegate] windowController];
0 голосов
/ 01 апреля 2010

Хорошо, тогда вам просто нужно объявить свои свойства в интерфейсе вашего класса.Переменные вашего экземпляра имеют префикс 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].Возможно, посмотрите шаблон проектирования синглтона, который является одним из наиболее используемых и полезных для простого извлечения экземпляра объекта, который должен быть уникальным. Как выглядит ваш синглтон Objective-C?

Vincent Zgueb

...