Вызов метода (экземпляра) из другого класса - PullRequest
0 голосов
/ 17 ноября 2011

способ вызова метода сводит меня с ума!и, к сожалению, я не смог найти его в уже заданных вопросах.Я знаю, как распределять и инициализировать, но дело в том, что в моей программе мне нужно вызывать метод внутри его собственного класса, это пример реализации, конечно, я знаю, что мог бы сделать это десятком более простых способов, но в программе, которую я разрабатываю, у меня естьочень сложный случай, который мне нужно сделать таким образом

в моем файле NIB, у меня есть метка и две кнопки.метка и одна из кнопок (называемых «установить на сегодня») связаны в appDelegate другая кнопка (называемая «установить на десять дней спустя») связана с классом. Здесь приведены коды для всех файлов, хотя код невыдает любую ошибку, но нажатие второй кнопки не влияет на правильный способ вызова этого метода.

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, и установлены действия и выходы. Заранее благодарим за любезную помощь.

PS в моем реальном опыте, например, я использую событие trackpad в классе CustomWindow для изменения метки.

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Поскольку во втором классе вы создаете новый экземпляр AppDelegate, а не вызываете уже созданный.В любом случае у вас должен быть только один NSApplicationDelegate.

Вам необходимо установить ссылку на ClassOne из ClassTwo в заголовочном файле и подключить их в NIB или установить программно, если вы создаете ClassTwoпрограммно.

Редактировать: я добавил средства доступа к свойствам, обязательно прочитайте объявленные свойства .

@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 голосов
/ 03 июня 2013
DisplayView *year = [[DisplayView alloc] initWithNibName:DisplayView bundle:nil];
[self presentModalViewController:year animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...