在我的NIB文件中,我有一个标签和两个按钮。 标签和其中一个按钮(称为“设置为今天”)在appDelegate中链接 另一个按钮(称为“设置为十天后”)链接到classTwo 这是所有文件的代码 虽然代码不会产生任何错误,但触发第二个按钮没有任何效果 调用该方法的正确方法是什么。
AppDelegate.h:
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
IBOutlet NSTextField *label;
NSDate *toDay;
}
-(IBAction)setToToday:(id)sender;
-(void)updateLabelText;
-(void)setToTenDays;
@property (assign) IBOutlet NSWindow *window;
@end
AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
-(IBAction)setToToday:(id)sender
{
toDay=[NSDate date];
[self updateLabelText];
}
-(void)updateLabelText
{
[label setStringValue:[NSString stringWithFormat:@"%@",toDay]];
}
-(void)setToTenDays
{
int secondsPerDay=60*60*24;
toDay = [NSDate dateWithTimeInterval:10*secondsPerDay sinceDate:toDay];
}
@end
ClassTwo.h
@interface ClassTwo : NSObject
-(IBAction)setToTenDaysLater:(id)sender;
@end
ClassTwo.m
#import "ClassTwo.h"
#import "AppDelegate.h"
@implementation ClassTwo
-(IBAction)setToTenDaysLater:(id)sender
{
AppDelegate *classOne=[[AppDelegate alloc] init];
[classOne setToTenDays];
[classOne updateLabelText];
}
@end
为什么我无法将标签设置为新日期? 两个对象都在NIB文件中,并设置了操作和出口 提前谢谢您的帮助。
P.S。根据我的实际经验,例如我在CustomWindow Class中使用trackpad事件来更改标签。
答案 0 :(得分:3)
因为在第二课中,你正在创建一个新的AppDelegate实例,而不是调用已经创建的实例。你应该只有一个NSApplicationDelegate。
如果要以编程方式创建ClassTwo,则需要在头文件中从ClassTwo设置ClassOne引用并在NIB中连接它们,或者以编程方式设置它。
编辑:我添加了属性访问者,请务必阅读declared properties。
@class AppDelegate;
@interface ClassTwo : NSObject {
AppDelegate *delegate;
}
@property (assign, nonatomic) IBOutlet AppDelegate *delegate;
- (IBAction)setToTenDaysLater:(id)sender;
@end
ClassTwo.m
#import "ClassTwo.h"
#import "AppDelegate.h"
@implementation ClassTwo
@synthesize delegate;
-(IBAction)setToTenDaysLater:(id)sender {
[delegate setToTenDays];
[delegate updateLabelText];
}
@end
然后在ClassOne(AppDelegate)中你可以像这样设置delegate
属性:
classTwo.delegate = self;
其中classTwo
是XIB中归档实例的IBOutlet,或者您也可以在代码中创建它。
答案 1 :(得分:0)
DisplayView *year = [[DisplayView alloc] initWithNibName:DisplayView bundle:nil];
[self presentModalViewController:year animated:YES];