#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];