gpt4 book ai didi

cocoa - IBOutlet 控件为零

转载 作者:行者123 更新时间:2023-12-03 16:46:20 29 4
gpt4 key购买 nike

我正在尝试设置来自不同类的 NSTextField 的文本..

这就是我所拥有的:

首选项.h

@interface Preferences : NSObject
{
IBOutlet NSTextField *selectionPointX;
}
@property (nonatomic, unsafe_unretained) IBOutlet NSTextField *dateTimeFormatPreview;

- (void)getSelection:(NSPoint)point :(NSSize)size;

@end

Preferences.m(仅需要的内容)

#import "Preferences.h"

@implementation Preferences

NSUserDefaults *userDefaults = nil;

int cPx;
int cPy;
int cSw;
int cSh;

- (void)getSelection:(NSPoint)point :(NSSize)size{
cPx = (int) point.x;
cPy = (int) point.y;
cSw = (int) size.width;
cSh = (int) size.height;
[self saveSelection];
}

- (void)saveSelection{
NSPoint p;
p.x = cPx;
p.y = cPy;

NSSize s;
s.width = cSw;
s.height = cSh;

[userDefaults setObject:NSStringFromPoint(p) forKey:@"selectionPoint"];
NSLog(@"Saved Window Position: X: %i Y: %i", cPx, cPy);

[userDefaults setObject:NSStringFromSize(s) forKey:@"selectionSize"];
NSLog(@"Saved Window Size: W: %i H: %i", cSw, cSh);
[userDefaults synchronize];


[selectionPointX setIntegerValue:cPx]; // selectionPointX is nil
}

@end

我从不同的类调用 getSelection,并向其传递值。

在 Interface Builder 中,我有一个带有 Preferences 类的 NSObject,我已将 Outlet 连接到 Controller 。但是当调试 selectionPointX 时,selectionPointXnil,因此不会更新我的 TextField。

我是 Objective-C 的新手,所以可能我做错了。我搜索了很多,但找不到解决方案。

感谢任何帮助,谢谢。

<小时/>

编辑:我想我已经找到了问题。由于我从不同的类调用该方法,因此我创建了该类的另一个实例,因此所有连接都没有连接。

我这样做了:

Preferences *prefs = [[Preferences alloc] init];
[prefs getSelection:(NSPoint)wPos :(NSSize)wSize];

我如何调用相同的方法,但使用 XIB 加载的 Preferences 的当前实例?

最佳答案

我有一个 LocalSettingsController ,它与您想要的类似。为了始终使用相同的 Preferences 实例,请实现单例模式。代码如下:

@implementation LocalSettingsController

+ (id)alloc
{
return self.sharedSettings;
}

+ (id)allocWithZone: (NSZone *)zone
{
return self.sharedSettings;
}

+ (instancetype)sharedSettings
{
static LocalSettingsController* singleton = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
singleton = [[self localAlloc] localInit];
});

return singleton;
}

- (id)init
{
return self;
}

+ (id)localAlloc
{
return [super allocWithZone: NULL];
}

- (id)localInit
{
return [super init];
}

在代码中,您可以使用 sharedSettings 成员,在 IB 中,您可以在 xib 中放置一个 NSObject 并将其实例类型更改为 LocalSettingsController(或者在您的情况下为 Preferences)。

关于cocoa - IBOutlet 控件为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770093/

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