gpt4 book ai didi

cocoa - 从属键如何注册? (键值观察)

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

我创建了一个简单的 Cocoa 应用程序。在 MainMenu.xib 中,我添加了一个 NSDatePicker 和一个 NSTextField。这两个对象都具有与应用程序委托(delegate)的属性的值绑定(bind)。我希望当用户更改 NSDatePicker 中的日期时, NSTextField 将被更新。这并没有发生。这是应用程序委托(delegate):

//  AppDelegate.h
#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;
@property (nonatomic, strong) NSDate *dateFromPicker;
@property (nonatomic, readonly) NSString *dateString;

@end


// AppDelegate.m
#import "AppDelegate.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

}

- (NSString *)dateString
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
return [formatter stringFromDate:self.dateFromPicker];
}

+ (NSSet *)keyPathsForValuesAffectingDateString
{
return [NSSet setWithObject:@"dateFromPicker"];
}

@end

使用 dateFromPicker 的观察者和一些 NSLog 语句更新了代码:

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self addObserver:self forKeyPath:@"dateFromPicker" options:0 context:NULL];
self.dateFromPicker = [NSDate dateWithNaturalLanguageString:@"12/12/12"];
}

- (NSString *)dateString
{
NSLog(@"dateString was called.");
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
return [formatter stringFromDate:self.dateFromPicker];
}

+ (NSSet *)keyPathsForValuesAffectingDateString
{
NSLog(@"keyPathsForValuesAffectingDateString was called.");
return [NSSet setWithObject:@"dateFromPicker"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change: (NSDictionary *)change context:(void *)context
{
NSLog(@"dateFromPicker changed.");
}

@end

这是日志:

2012-08-10 15:37:15.086 ... keyPathsForValuesAffectingDateString was called.
2012-08-10 15:37:15.087 ... dateString was called.
2012-08-10 15:37:15.116 ... dateFromPicker changed.
2012-08-10 15:37:15.117 ... dateString was called.
2012-08-10 15:37:19.831 ... dateFromPicker changed.
2012-08-10 15:37:19.831 ... dateString was called.

最佳答案

我知道这不完全是你要问的,但是......

为什么不将 NSTextField 绑定(bind)到 NSDate 属性并在 Interface Builder 中为其添加格式化程序?

关于cocoa - 从属键如何注册? (键值观察),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909443/

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