0

我希望变量 annoInizio 和 annoFine 在 mostrarisultato 方法中可用。我能怎么做?我尝试了不同的解决方案,但我做不到。我想我为代码中任何地方使用的全局变量提供服务。

    - (id)init {
    if (self == [super init]) {
        NSDate *adesso = [NSDate date];
        NSDateComponents *adessoComponents = [[NSCalendar currentCalendar] components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:adesso];
        //NSDate *dopo = [NSDate date];
        NSDateComponents *dopoComponents = [[NSCalendar currentCalendar] components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:adesso];


        NSDate *oggiAMezzanotte = [[NSCalendar currentCalendar] dateFromComponents:adessoComponents];
        NSDate *oggifinito = [[NSCalendar currentCalendar] dateFromComponents:dopoComponents];
        //[datePicker setDateValue:oggiAMezzanotte];
        //[datePicker2 setDateValue:oggiAMezzanotte];

        int daysToAdd = 364;
        NSDate *newDate1 = [oggifinito dateByAddingTimeInterval:60*60*24*daysToAdd];
        self.dataInizio = oggiAMezzanotte;
        int annoInizio = [adessoComponents year];
        NSLog(@"Anno inizio %i.", annoInizio);
        self.dataFine = newDate1;// Sets these to "now"
        NSDateComponents *newDate1Components = [[NSCalendar currentCalendar] components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:newDate1];
        int annoFine = [newDate1Components year];
        NSLog(@"Anno fine %i.", annoFine);
    }
    return self;
}

- (IBAction)mostrarisultato:(id)sender;
{



    if (dataFine<dataInizio) {
        [NSApp beginSheet:theSheet
           modalForWindow:(NSWindow *)_window
            modalDelegate:self
           didEndSelector:nil
              contextInfo:nil];
    } else {
        [progressIndicator startAnimation: self];
        [textView setString: @""];
        int lunedi = 0;
        int martedi = 0;
        int mercoledi = 0;
        int giovedi = 0;
        int venerdi = 0;
        int sabato = 0;
        int domenica = 0;
4

1 回答 1

1

一种面向对象的处理方法是缓存结果的类方法:

+ (int) annoInizio {
    static int singleton;
    if (!singleton) {
        ....
        singleton = ....;
    }
    return singleton;
}

另一种方式是实例变量。例如 dataInizio,似乎既是实例变量又是属性。

当然,您也可以使用全局变量。只需将 'int annoInizio' 添加到文件顶部并更改int annoInizio = ...annoInizio = ...in -init

于 2012-04-25T19:04:39.000 回答