2011-11-17 60 views
0

調用某個方法的方式讓我非常瘋狂!不幸的是我在已經提出的問題中找不到它。 我知道如何分配和初始化 但事情是在我的程序中我需要調用其自己的類內的方法 這裏是一個示例實現,當然我知道我可以做到這一點在十幾種更簡單的方法,但在程序中我開發我有一個非常複雜的案例,我需要這樣做調用另一個類的(實例)方法

在我的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中使用觸控板事件來更改標籤。

回答

3

因爲在第二課中,您正在創建AppDelegate的新實例,而不是調用已創建的實例。無論如何,你只應該有一個NSApplicationDelegate。

您需要在頭文件中設置ClassTwo對ClassOne的引用,並將它們連接到NIB中,或者以編程方式將其設置,如果您以編程方式創建ClassTwo。

編輯:我已添加屬性訪問器,請務必閱讀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是一個IBOutlet到歸檔實例中你的XIB,或者你也可以在代碼中創建它。

+0

哇!謝謝,這工作!你能幫忙以編程方式設置代表嗎? – Nabi

+0

這只是一個將屬性添加到ClassTwo實例並在代碼中進行設置的問題,我已在上面添加了它。 –

0
DisplayView *year = [[DisplayView alloc] initWithNibName:DisplayView bundle:nil]; 
[self presentModalViewController:year animated:YES]; 
相關問題