gpt4 book ai didi

Objective-C Mac OSX 应用程序 - 从另一个委托(delegate)获取变量?

转载 作者:行者123 更新时间:2023-12-03 16:53:02 25 4
gpt4 key购买 nike

EchoAppDelegate.h

NSString *theString;

EchoAppDelegate.m

/////being declared somewhere here//////
theString = [lastUserInputJabber stringValue];

ChatController.m

//Get theString variable from echoappdelegate
NSString *theStringDiff = theString;

我该怎么做?

最佳答案

EchoAppDelegate 必须提供返回该字符串的方法,或者使该字符串成为公共(public) ivar。例如,您可以实现一个 getter 方法,例如:

// EchoAppDelegate.h
@interface EchoAppDelegate : NSObject <NSApplicationDelegate> {
NSString *theString;
}
- (NSString *)theString;
@end

// EchoAppDelegate.m
@implementation EchoAppDelegate
- (NSString *)theString { return theString; }
@end

或者将其设为声明的属性并让 Objective-C 自动提供 getter 方法:

// EchoAppDelegate.h
@interface EchoAppDelegate : NSObject <NSApplicationDelegate> {
NSString *theString;
}
@property (readonly) NSString *theString;
@end

// EchoAppDelegate.m
@implementation EchoAppDelegate
@synthesize theString;
@end

(根据您的目标/编译器,您可能不需要声明 ivar — 现代运行时和足够新的编译器可以自动为声明的属性创建支持 ivars。此外,根据您的设计,您可能希望创建 theString 一个读写复制属性,在这种情况下,您还将获得一个将任意字符串复制到theString上的setter方法。)

完成此操作后,您的应用程序委托(delegate)现在公开了一个返回该字符串的方法。当需要在应用程序委托(delegate)以外的实现文件中访问它时,请使用 -[NSApplication delegate] 获取委托(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];
}

正如 jer 所指出的,您应该考虑应用程序委托(delegate)是否是保存该字符串的正确位置。应用程序委托(delegate)应该关注适用于整个应用程序的信息和行为。

关于Objective-C Mac OSX 应用程序 - 从另一个委托(delegate)获取变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6165403/

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