Использование IBOutlet во всех классах - PullRequest
0 голосов
/ 22 августа 2011

Я ознакомился с темой, похожей на следующий код, который у меня есть.К сожалению, это не работает, как планировалось.Следующий код не выдает ошибку / предупреждение, но ничего не будет делать.Я хочу уровень класса 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 Ответ

2 голосов
/ 22 августа 2011

Я не совсем уверен, что ты здесь делаешь.NSPrint создает экземпляр интерфейса и изменяет свойство одной из его переменных экземпляра.Затем метод заканчивается.

Что вы ожидаете увидеть из этого? У вас нет экземпляра интерфейса, созданного в NSPrint:, связанного с чем-либо или выполняющего что-либо - вы просто создаетеи оставь его свободным.Чтобы на самом деле получить доступ к экземпляру интерфейса, созданному [Interface new], используйте что-то вроде:

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

В отношении IBOutlet: IBOutlet не имеет никакого значения, кроме как предупредить конструктор интерфейса XCode о том, что он должен позволить вамсоздавать соединения между переменной объекта контроллера (помеченной IBOutlet) и другим объектом, созданным в конструкторе интерфейса.Затем, когда представление загружается, вызывается метод set переменной объекта контроллера с использованием подключенного объекта в качестве аргумента.Вы получите экземпляр класса контроллера с его переменной экземпляра, установленной на объект, созданный в Интерфейсном Разработчике.

Для получения дополнительной информации об этом см. Руководство Objective-C на веб-сайте Apple: 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

Если вам нужна переменная класса (то есть переменная, связанная с классом, а не с конкретным экземпляром этого класса), у вас естьпроблема.Взгляните на этот вопрос, чтобы узнать больше об этом: Цель C Статические переменные уровня класса

...