Использование NSTimer для закрытия приложения

Немного нуб здесь.

Я разрабатываю приложение, которое воспроизводит некоторые зацикленные звуки. Я хотел бы дать пользователю возможность закрыть приложение через определенное время с помощью таймера. Идея заключается в том, что пользователь нажимает кнопку, и приложение закрывается, как только таймер истечет.

В момент нажатия кнопки приложение вылетает.

Вот что я получил до сих пор:

- (IBAction)timer:(id)sender{

    timer = [NSTimer scheduledTimerWithInterval: 10.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES];

}


-(void) targetMethod: (NSTimer*) theTimer {
    NSLog(@"timer?");
    exit(0);

}

person redned    schedule 10.12.2010    source источник
comment
Ваш код выглядит разумным, если предположить, что таймер является сохраняемым свойством, я думаю? Следующее, что нужно сделать, это поместить сообщения NSLog до и после вызова [timer ScheduleTimer...] и еще один NSLog в targetMethod:   -  person MahatmaManic    schedule 10.12.2010
comment
Еще одна вещь, на которую следует обратить внимание, - это убедиться, что, когда вы объявляете IBAction в заголовке, вы объявляете его идентично тому, как вы объявляете его в .m -(IBAction) timer:(id)sender и что он подключен правильно в xib. Если вы видите что-то при сбое, например, нераспознанный селектор, и/или вы не видите, что эти сообщения в журнале срабатывают, значит, вы не совсем правильно подключили его.   -  person MahatmaManic    schedule 10.12.2010
comment
Apple не одобрит любое приложение, которое преднамеренно отключается. Если вы собираетесь это сделать, не ожидайте, что App Store станет местом для публикации.   -  person Tommy    schedule 10.12.2010
comment
@Tommy, это похоже на допустимый пользовательский сценарий. Лучшим вариантом может быть как-то вместо этого отправить его в фоновый режим или перевести устройство в спящий режим, как если бы была нажата кнопка спящего режима, если это возможно.   -  person Shaggy Frog    schedule 10.12.2010
comment
Согласен с тем, что приложение было отклонено из-за того, что оно отключилось. Вместо того, чтобы закрывать приложение, вы можете просто перестать воспроизводить звуки. Тот же эффект для пользователя.   -  person Matthew Frederick    schedule 10.12.2010
comment
Я согласен с Томми в том, что Apple не одобрит такой тип приложения. Ну, зачем вам это делать, чтобы закрыть приложение. У пользователя будет плохой опыт, когда приложение закроется, предположим, как и сбой. экран после этого времени.   -  person Sabby    schedule 11.12.2010
comment
Я не знал, что Apple откажется опубликовать приложение с этой функцией, спасибо. Я рассмотрю что-нибудь еще, возможно отправлю на домашний экран. Я почти уверен, что все подключено правильно, а таймер является сохраняемым свойством, указанным в заголовочном файле, т. е. @propery (неатомарное, сохранение) NSTimer *timer; @MahataManic Оператор NSLog выводится на консоль, но появляется нераспознанный селектор. Проводку проверю, спасибо.   -  person redned    schedule 11.12.2010


Ответы (1)


Вам нужно правильно определить ссылку на таймер:

NSTimer *timer = [NSTimer scheduledTimerWithInterval: 10.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES];
person James Sumners    schedule 10.12.2010
comment
Как отмечает @jsumners, вам не хватает NSTimer * в начале объявления таймера. Вам нужно указать тип и указать, что это указатель. - person Matthew Frederick; 10.12.2010
comment
Спасибо за ответы. Я, вероятно, должен добавить, что у меня есть таймер, объявленный в заголовочном файле как таковой: NSTimer *timer; Я проверю код, чтобы убедиться, что все сделанные предложения присутствуют в коде. - person redned; 11.12.2010
comment
РЕШЕНО! У меня был NSTimer *timer = [NSTimer ScheduleTimerWithInterval: 10.0 target:self selector:@selector(targetMethod:) userInfo:nil Repeats: YES]; вместо NSTimer *timer = [NSTimer scheduleTimerWithTimeInterval: 10.0 target:self selector:@selector(targetMethod:) userInfo:nil Repeats: YES]; Я пропустил время до интервала. Спасибо всем за ответы. - person redned; 11.12.2010