gpt4 book ai didi

objective-c - 无法访问应用程序委托(delegate)属性

转载 作者:行者123 更新时间:2023-12-03 17:31:53 26 4
gpt4 key购买 nike

我正在尝试从另一个类访问我的应用程序委托(delegate)中的属性(我认为这会相当简单),但我在这样做时遇到了麻烦。我的文件目前如下所示:

LTAppDelegate.h

#import <Cocoa/Cocoa.h>
#import "Subject.h"

@interface LTAppDelegate : NSObject <NSApplicationDelegate, NSOutlineViewDelegate, NSOutlineViewDataSource, NSMenuDelegate> {

}

@property Subject *selectedSubject;

@end

LTAppDelegate.m

@synthesize selectedSubject;

然后在 LTAppDelegate.m 的 applicationDidFinishLaunching 中设置 selectedSubject 的值。现在我想从我拥有的另一个类(称为 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 中调用 applicationDidFinishLaunching 之前调用 LTTableViewController 的 init 方法。基于此,LTTableViewController.m init 中的“测试主题”NSLog() 显示 null 是有意义的;但是,“currentSubjectDetails”方法链接到界面上的一个按钮,当应用程序加载完成后按下该按钮时,NSLog() 消息仍然返回 null。

这里有什么明显的我遗漏的东西吗?我觉得我有点愚蠢,错过了一些非常基本的东西。

最佳答案

此处描述了类似的问题 http://iphonedevsdk.com/forum/iphone-sdk-development/11537-viewcontroller-called-before-applicationdidfinishlaunching.html通常不建议在构造函数中添加此类功能。一般来说,我建议使用参数,而不是依赖隐藏的依赖项,因为这些依赖项必然取决于执行顺序,并且您将失去编译器的帮助来避免无效值。 View Controller 初始化程序不应该用于存储可变引用,因为 View Controller 是由预定义的构造函数自动初始化的,并且您不能以这种方式向它们传递参数。

如果您需要访问应用程序委托(delegate),请获取它,对其执行操作并删除引用。尽量不要缓存它,你很可能会引入隐藏的问题。如果查看的内容取决于任何类型的当前状态,我建议您加入出现-消失循环。

关于objective-c - 无法访问应用程序委托(delegate)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13099611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com