EchoAppDelegate
должен предоставить метод, который возвращает эту строку, или сделать эту строку общедоступным ivar. Например, вы можете реализовать метод получения, например:
// EchoAppDelegate.h
@interface EchoAppDelegate : NSObject <NSApplicationDelegate> {
NSString *theString;
}
- (NSString *)theString;
@end
и
// EchoAppDelegate.m
@implementation EchoAppDelegate
- (NSString *)theString { return theString; }
@end
или сделайте его объявленным свойством, и Objective-C автоматически предоставит метод получения:
// EchoAppDelegate.h
@interface EchoAppDelegate : NSObject <NSApplicationDelegate> {
NSString *theString;
}
@property (readonly) NSString *theString;
@end
и
// EchoAppDelegate.m
@implementation EchoAppDelegate
@synthesize theString;
@end
(В зависимости от вашей цели / компилятора вам может не потребоваться объявлять ivar - современная среда выполнения и достаточно недавние компиляторы могут автоматически создавать резервные ivar для объявленных свойств. Также, в зависимости от вашего дизайна, вы можете сделать theString
свойство readwrite copy
, в этом случае вы также получите метод установки, который копирует произвольную строку в theString
.)
Сделав это, ваш делегат приложения теперь предоставляет метод, который возвращает эту строку. Когда вам нужно получить доступ к нему в файле реализации, отличном от файла делегата приложения, используйте -[NSApplication delegate]
для получения делегата, а затем используйте метод getter для получения строки:
// ChatController.m
#import "EchoAppDelegate.h"
- (void)someMethod {
// Get a reference to the application delegate instance
EchoAppDelegate *appDelegate = (EchoAppDelegate *)[NSApp delegate];
// Use the application delegate instance to get theString
NSString *theStringDiff = [appDelegate theString];
}
Как указал Джер, вам следует подумать, является ли делегат приложения правильным местом для хранения этой строки. Делегат приложения должен иметь дело с информацией и поведением, которое применяется ко всему приложению.