2014-01-21 3 views
0

у меня есть проблемы с доступом значения из NSTExtField в другом классе здесь есть код:какао NSTextField

AppDelegate.h

#import <Cocoa/Cocoa.h> 

@interface AppDelegate : NSObject <NSApplicationDelegate> 

@property (assign) IBOutlet NSWindow *window; 
@property (weak) IBOutlet NSTextField *numberOfPhrases; 

@end 

AppDelegate.m

#import "AppDelegate.h" 

@implementation AppDelegate 
@synthesize numberOfPhrases; 


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSLog(@"%@",[numberOfPhrases stringValue]); 
} 

TestClass.h

@interface TestClass : NSObject 

- (IBAction)doSomething:(id)sender; 

@end 

TestClass.m

@implementation TestClass 

- (IBAction)doSomething:(id)sender { 


    NSLog(@"%@",[numberOfPhrases stringValue]); ????????? 


} 

ответ

0

Единственное, что вам не хватает, является добавление в файл TestClass.m:

#import "TestClass.h" 
#import "AppDelegate.h" 

@implementation TestClass 

- (IBAction)doSomething:(id)sender { 

    AppDelegate *theInstance = [[AppDelegate alloc] init]; 
    [theInstance numberOfPhrases]; 

} 

@end 

Вам нужно включить класс заголовок AppDelegate.h в TestClass.m, то вы просто вызвать экземпляр через [[AppDelegate alloc] init]; Вам нужно связать NSTextField с Переданные действия в Interface Builder do:Something -> TestClass и REFERENCING OutletsnumberOfPhrases -> AppDelegate.

Выход:

2014-01-21 23:32:56.499 test[6236:303] Wonders Never Cease 
+0

К сожалению об этом, но мы по-прежнему отсутствует точка – crazyjuice

+0

я хотел бы получить значение из textfiled которая инициализируется внутри AppDelegate.Do я должен создать экземпляр AppDelegate внутри TestClass? – crazyjuice

+0

@ crazyjuice, Отсутствие точки будет иметь код, который не запускается - если у вас есть ошибки, их нужно исправить, прежде чем идти дальше. –

1

Вы, очевидно, не может получить доступ к значению текстового поля в другом классе без ссылки на него.

Чтобы получить доступ к значению текстового поля, вам понадобится еще один IBOutlet для него в этом классе или IBOutlet для AppDelegate, чтобы вы могли получить доступ к его свойству.

TestClass.h

@interface TestClass : NSObject 
{ 
    IBOutlet NSTextField *numberOfPhrases; // connect it to the new referencing outlet of text field by dragging a NSObject object in your xib and setting its class to "TestClass" 
} 

- (IBAction)doSomething:(id)sender; 

@end 

или другой вариант, чтобы иметь IBOutlet из AppDelegate в TestClass (потому что если вы только создать новый экземпляр AppDelegate, а не его IBOutlet то другой экземпляр текстового поля будет будет создан, и вы не сможете получить доступ к значению вашего текстового поля)

TestClass.h

@interface TestClass : NSObject 
{ 
    IBOutlet AppDelegate *appDel; // connect in the xib 
} 

- (IBAction)doSomething:(id)sender; 

@end 

TestClass.m

@implementation TestClass : NSObject 

- (IBAction)doSomething:(id)sender 
{ 
    [[appDel numberOfPhrases]stringValue]; //get the string value in text field 
} 

@end 
+0

thx для ответа и извините за недостающие части кода (это должно быть написано в псевдокоде) – crazyjuice

Смежные вопросы