別のクラスからアプリデリゲートのプロパティにアクセスしようとしていますが(かなり単純だと思いました)、アクセスに問題があります。私のファイルは現在次のようになっています。
LTAppDelegate.h
#import <Cocoa/Cocoa.h>
#import "Subject.h"
@interface LTAppDelegate : NSObject <NSApplicationDelegate, NSOutlineViewDelegate, NSOutlineViewDataSource, NSMenuDelegate> {
}
@property Subject *selectedSubject;
@end
LTAppDelegate.m
@synthesize selectedSubject;
次に、selectedSubjectの値がapplicationDidFinishLaunching
LTAppDelegate.m内に設定されます。今、私が持っている別のクラスからこれにアクセスしたいと思っています。これはLTTableViewControllerと呼ばれ、次のように設定されています。
LTTableViewController.h
#import <Foundation/Foundation.h>
#import "LTAppDelegate.h"
#import "Subject.h"
#import "Note.h"
@interface LTTableViewController : NSObject{
NSMutableArray *notesArray;
LTAppDelegate *appDelegate;
Subject *s;
}
-(IBAction)currentSubjectDetails:(id)sender;
@end
LTTableViewController.m
#import "LTTableViewController.h"
@implementation LTTableViewController
- (id)init
{
self = [super init];
if (self) {
appDelegate = ((LTAppDelegate *)[[NSApplication sharedApplication] delegate]);
s = [appDelegate selectedSubject];
NSLog(@"Test Subject: %@", [s title]);
}
return self;
}
-(IBAction)currentSubjectDetails:(id)sender{
NSLog(@"Selected Subject: %@", [s title]);
}
さまざまなNSLog()メッセージを挿入した後、LTAppDelegateで呼び出される前にLTTableViewControllerのinitメソッドapplicationDidFinishLaunching
が呼び出されたように見えます。これに基づいて、LTTableViewController.minitの「TestSubject」NSLog()がnullを表示することは理にかなっています。ただし、「currentSubjectDetails」メソッドはインターフェース上のボタンにリンクされており、アプリの読み込みが完了した後にボタンを押すと、NSLog()メッセージは引き続きnullを返します。
私がここで見逃している明らかなものはありますか?私は少し愚かで、本当に基本的なものが欠けているような気がします。