我正在为 OS X 开发一个应用程序,但遇到了一个问题。
该应用程序的结构是:
AppDelegate:主要操作发生在 MainMenu.xib 中。它也是创建主窗口的地方。
SettingsWindowController:设置窗口是使用 SettingsWindow.xib 中的接口定义的。
我创建了一个协议 SettingsWindowProtocol 来委派这两个类。
我又创建了一个类 dbHandler,它
dbh
在 AppDelegate 中被初始化为一个 obj。在 SettingsWindowProtocol 中,我创建了一个发送对象的方法,但是在 SettingsWindowControl 中调用此方法后,该对象为空。
问题是我如何在两个不同的类中共享同一个对象?
与问题相关的一些代码块:
AppDelegate.h:
#import "dbHandler.h"
...
@property (retain) dbHandler *dbh;
@interface AppDelegate : NSObject <SettingsWindowControllerProtocol>
-(dbHandler*)sendDBobject;
AppDelegate.m:
...
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
dbh = [[dbHandler alloc]init];
...
}
- (IBAction)settingsButton:(id)sender {
if(!settingsWindowController){
settingsWindowController = [[SettingsWindowController alloc] initWithWindowNibName:@"SettingsWindow"];
}
[settingsWindowController showWindow:self];
settingsWindowController.delegate = self;
}
-(dbHandler*)sendDBobject{
return dbh;
}
设置窗口控制器.h:
#import "dbHandler.h"
@protocol SettingsWindowControllerProtocol<NSObject>
-(dbHandler*)sendDBobject;
@end
@interface SettingsWindowController : NSWindowController
@property (assign) id<SettingsWindowControllerProtocol> delegate;
@property (retain) dbHandler* dbh;
@end
设置窗口控制器.m:
- (void)windowDidLoad
{
dbh = [delegate sendDBobject];
[super windowDidLoad];
NSLog(@"settings string returned: %@",[dbh returnString]);
}