如何从其他实现文件的类方法访问ivar

时间:2010-04-01 12:46:23

标签: objective-c instance-variables

如何从其他实现文件的类方法中访问实例变量的属性(标题,状态等)?我试过@synthesize,但我无法让它工作。更确切地说;我需要访问NSWindowController类的IBOutlets。

3 个答案:

答案 0 :(得分:1)

首先,您应该先阅读本章。

Introduction to The Objective-C Programming Language

你想知道什么?显然,如果没有实例,则无法访问实例变量。类方法是一种静态方法(消息),您可以在没有任何对象实例的情况下访问它。你能准确一下大卫吗?

答案 1 :(得分:0)

好的,你只需要在类接口中声明你的属性。您的实例变量以IBOutlet为前缀,表示必须使用nib设置它们。 也许你已经知道了所有这些。对不起,那个案子。

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - -    
  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

如果你实例化你的类,只需调用accessor [myObjectOfMyClass title]。 也许可以看到单例设计模式,它是最常用和最有用的一种,可以轻松检索必须唯一的对象实例。 What does your Objective-C singleton look like?

Vincent Zgueb

答案 2 :(得分:0)

我经常使用我的appcontroller作为我需要在所有类中访问的内容的中介...假设你的appcontroller也是你的应用程序的委托。从任何课程我都可以使用[NSApp委托]到我的appcontroller(app delegate)。

考虑到这一点,我确保我的appcontroller实例化窗口控制器之类的东西。然后,如果我需要访问窗口控制器,我在appcontroller中为它创建一个实例变量,然后为该实例变量创建一个访问器方法。例如:

appcontroller.h中的

MyWindowController *windowController;
@property (readonly) MyWindowController *windowController;
appcontroller.m中的

@synthesize windowController;

然后从任何类我可以使用以下命令到达窗口控制器的实例:

MyWindowController *windowController = [[NSApp delegate] windowController];