OS X 用のアプリを開発していますが、問題が発生しました。
アプリの構造は次のとおりです。
AppDelegate: MainMenu.xib からの主なアクションが実行される場所。また、メイン ウィンドウが作成される場所でもあります。
SettingsWindowController: 設定ウィンドウは、SettingsWindow.xib からのインターフェイスで定義されます。
これら 2 つのクラスを委任するプロトコル SettingsWindowProtocol を作成しました。
AppDelegate で obj として初期化されるもう 1 つのクラス dbHandler を作成
dbh
しました。SettingsWindowProtocol でオブジェクトを送信するメソッドを作成しましたが、SettingsWindowControl でこのメソッドを呼び出した後、オブジェクトは null です。
問題は、2 つの異なるクラスで同じオブジェクトを共有する方法です。
質問に関連するコードのいくつかのブロック:
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;
}
SettingsWindowController.h :
#import "dbHandler.h"
@protocol SettingsWindowControllerProtocol<NSObject>
-(dbHandler*)sendDBobject;
@end
@interface SettingsWindowController : NSWindowController
@property (assign) id<SettingsWindowControllerProtocol> delegate;
@property (retain) dbHandler* dbh;
@end
SettingsWindowController.m:
- (void)windowDidLoad
{
dbh = [delegate sendDBobject];
[super windowDidLoad];
NSLog(@"settings string returned: %@",[dbh returnString]);
}