Var виден в viewDidLoad, но не где-то еще

#iphone #objective-c #global-variables #instance-variables #protected

#iPhone #objective-c #глобальные переменные #переменные экземпляра #защищен

Вопрос:

Я программирую одно приложение для iphone, и возникает проблема; я могу использовать переменную NSDate в методе viewDidLoad, но не где-то еще! Как это можно сделать? как это можно решить?

вот мои важные строки:

 @interface GraphNavController : UINavigationController {

IBOutlet UIImage *image;
CGPoint gestureStartPoint;
IBOutlet UISegmentedControl *segmentedControl;

NSDateComponents *dateComponents;
NSCalendar *gregorian;

@public
NSDate *date;   
  

}

И в коде реализации…

 - (void)viewDidLoad {
[super viewDidLoad];

date = [[NSDate alloc] init];

//  Set the GMT @ 2
gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"GMT 2"]];

dateComponents = [[NSDateComponents alloc] init];
[dateComponents setMonth:11];

[dateComponents setMonth:11];// tests ^^
date = [gregorian dateByAddingComponents:dateComponents toDate:date options:0];

NSLog(@"-->  Date : %@ - DComponents's : %d-%d-%d - gregorian : %@",date, [dateComponents day], [dateComponents month], [dateComponents year], [gregorian calendarIdentifier]); // is running here completely well
  

}

И переменная date скрыта в любом другом методе этого класса…

Я уже пытаюсь поместить эту переменную в @public, @private, @package, … но ничего не выполняется.

Приложение отключается без какого-либо описания проблемы! Мне просто нужно поместить журнал даты в другое место, кроме как в viewOnLoad, и появляется сбой…

Комментарии:

1. Вы пытаетесь добавить 11 месяцев к текущей дате?

Ответ №1:

dateByAddingComponents:toDate:options: возвращает автоматически выпущенный объект. Вы должны сохранить его. Если вы используете свойство:

 @property(retain,nonatomic) NSDate *date;
  

тогда вы можете сделать это:

 self.date = [gregorian dateByAddingComponents:dateComponents toDate:[NSDate date] options:0];
  

Комментарии:

1. А еще лучше, сделайте это @property(retain,nonatomic) NSDate *date;

2. @Martin: Я внес это изменение, но приложение все равно вылетает :-/

3. @clement Если вы используете свойство, убедитесь, что вы используете self.date вместо date (см. отредактированный ответ)

4. @clement не забудьте @synthesize date; для вашего свойства

5. @clement кроме того, вам не нужно делать date = [[NSDate alloc] init]; , просто self.date = [gregorian dateByAddingComponents:dateComponents toDate:[NSDate date] options:0];