РЕДАКТИРОВАТЬ: Добавил NSRunLoop из моего кода, как упоминал Дипак ниже. Это было изначально в моем коде и забыл добавить, как это было закомментировано.
У меня есть 2 класса: MainViewController и ConfigViewController. Пользователь переключается на ConfigView и использует комбо UIDatePicker / UIButton для установки даты / времени. После получения правильного времени от объекта UIDatePicker, я настроил NSTimer для запуска согласно следующему коду:
ConfigViewController.m
-(IBAction)setAlarmDate:(id)sender {
//Instantiate to get access to doAlarm:
MainViewController *mvc = [[MainViewController alloc] init];
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateStyle:NSDateFormatterMediumStyle];
[dateFormat setTimeStyle:NSDateFormatterShortStyle];
NSString *target = [NSString stringWithFormat:@"%@",[dateFormat stringFromDate:datePicker.date]];
alarmDate = [datePicker date];
mvc.fireTimer = [[NSTimer alloc]
initWithFireDate:alarmDate interval:1 target:mvc
selector:@selector(doAlarm:) userInfo:nil repeats:YES];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:mvc.timer forMode:NSDefaultRunLoopMode];
[self dismissModalViewControllerAnimated:NO];
}
Метод doAlarm: выглядит следующим образом:
MainViewController.m
- (void)doAlarm:(NSTimer *)timer {
NSLog(@"Called doAlarm:");
UIImage *ac = [UIImage imageNamed:@"alarmclock.png"];
[self.alarmview setImage:ac];
[self.alarmview setHidden:NO];
[self.view addSubview:alarmview];
[self.view bringSubviewToFront:alarmview];
}
Однако, когда я устанавливаю дату будильника, таймер не срабатывает. Я думаю, что следующие проблемы в движении:
1) Я создаю экземпляр нового экземпляра класса MainViewController, настраиваю таймер, а затем возвращаю управление обратно «оригинальному» экземпляру MainViewController, когда увольняю MVC. На данный момент, вероятно, «новый» экземпляр MainViewController - не что иное, как свисающий указатель, и на него никогда больше не ссылаются, следовательно, нет ошибки.
2) doAlarm: ссылается на self.view, который должен предполагаться как MainViewController.view, но, поскольку он создается в контексте ConfigViewController, изображение тревоги никогда не будет видно в любом случае ...
Я полагаю, что мои теории немного необоснованны, но с моим нынешним уровнем знаний они имеют смысл для меня.
Любой свет, который ты можешь пролить на вышеприведенное, будет разбит.
Большое спасибо!
швейцарский сыр.