在所有类中使用IBOutlet

时间:2011-08-22 01:44:48

标签: objective-c nsobject

我已经查询了一个与我目前为止的代码类似的线程。不幸的是,这不按计划运作。以下代码不会产生错误/警告但不会执行任何操作。我想要IBOutlet类级别,因为它将在如下所述的类级方法中使用。

#import <Foundation/Foundation.h>

@interface Interface : NSObject <NSApplicationDelegate> {NSTextView* textView;}

@property (nonatomic, retain) IBOutlet NSTextView* textView;

+ (void)NSPrint:(NSString*)aString;

@end

同时在Interface.m ..

 #import "Interface.h"

@implementation Interface
@synthesize textView;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [Interface NSPrint:@"Have fun with this program!"];
}
+ (void)NSPrint:(NSString*)aString
{
    [[[[[Interface new] textView] textStorage] mutableString] appendFormat:@"%@\n",aString];
}

1 个答案:

答案 0 :(得分:2)

我不确定你在这里做什么。 NSPrint创建Interface实例,并更改其实例变量之一的属性。然后方法结束。

您希望从中观察到什么?您没有在NSPrint:创建的Interface实例连接到任何东西或做任何事情 - 您只需创建它并让它浮动自由。要实际访问[Interface new]创建的Interface实例,请使用以下内容:

+(Interface*)NSPrint:(NSString*)aString
{
      Interface* newInterface = [Interface new];
      [[[[newInterface textView] textStorage] mutableString] appendFormat:@"%@\n",aString];
      return newInterface;
}

关于IBOutlet的主题:IBOutlet没有任何意义,除了提醒XCode的接口构建器它应该允许您在控制器对象的变量(标记为IBOutlet)和在接口构建器中创建的另一个对象之间创建连接。然后,在加载视图时,使用连接对象作为参数调用控制器对象的变量的setter方法。最终得到一个控制器类的实例,其实例变量设置为在界面生成器中创建的对象。

有关详细信息,请查看Apple网站上的Objective-C手册:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html或有关界面构建器的信息:http://developer.apple.com/library/mac/#recipes/xcode_help-interface_builder/_index.html#//apple_ref/doc/uid/TP40009971

如果您需要一个类变量(即一个连接到类的变量而不是该类的特定实例),则会出现问题。请查看此问题以获取更多相关信息:Objective C Static Class Level variables