2012-04-25 123 views
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; 

回答

1

一个面向对象的方式来处理,这将是一类方法,其高速缓存结果:

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

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

当然,你可以改用全局变量。只需在文件顶部添加'int annoInizio',并在-init中将int annoInizio = ...更改为annoInizio = ...即可。