1

簡単な Cocoa アプリケーションを作成しました。MainMenu.xib に、NSDatePicker と NSTextField を追加しました。これらのオブジェクトは両方とも、App Delegate のプロパティへの Value バインディングを持っています。ユーザーが NSDatePicker の日付を変更すると、NSTextField が更新されることを期待しています。これは起こっていません。アプリのデリゲートは次のとおりです。

//  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.
4

1 に答える 1

0

これはあなたが求めていたものではないことはわかっていますが、...

NSTextField を NSDate プロパティにバインドし、Interface Builder でフォーマッタを追加してみませんか?

于 2012-08-10T21:38:44.530 に答える