выйти из приложения, установив NSTimer?

есть ли лучший способ выйти из приложения программно?

Недавно я сделал приложение для радио, в котором есть пользовательская настройка, позволяющая установить время с помощью NSTimer для выхода из процесса приложения (я имею в виду время сна). когда придет время, приложение должно остановить свой процесс и выйти.

я использовал эти инструкции, чтобы выйти из приложения, когда придет время,

  [[UIApplication sharedApplication] suspend];
  [[UIApplication sharedApplication] terminateWithSuccess];

theTimer=[NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(countTime) userInfo:nil repeats:YES];

counter-=1;
timeLeft.text=[NSString stringWithFormat:@" %d",counter];
if (counter==0.0) {

    [theTimer invalidate];
  [[UIApplication sharedApplication] suspend];
  [[UIApplication sharedApplication] terminateWithSuccess];

есть ли у них какие-либо проблемы с использованием [[UIApplication sharedApplication] suspend]; [[UIApplication sharedApplication] terminateWithSuccess]; методы

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


person Neeraj Neeru    schedule 16.03.2012    source источник


Ответы (3)


Я всегда использовал выход (0). Я предполагаю, что если вам нужно запустить код перед выходом из приложения, вы должны вызвать его до выхода (0).

Apple не одобряет использование функции exit(), поскольку пользователь точки зрения это выглядит как авария. Но они также говорят, что нет вызова API для корректного завершения вашего приложения.

Если вы ищете способ завершить свое приложение без нажатия пользователем кнопки «Домой» во время сна, я предполагаю, что он не спутает это со сбоем, поскольку он не будет обращать внимание на ваше приложение, а выход() уйдет. нет журнала сбоев.

Итак, ваши варианты:

  • Забудьте об этом и просто подайте звуковой сигнал через некоторое время, чтобы напомнить ему закрыть приложение. (ужасный!)
  • Закройте приложение, используя свои личные звонки, и рискуете получить отказ от Apple.
  • Закройте приложение с помощью exit() и придерживайтесь вызовов POSIX (принятых).
person fbernardo    schedule 16.03.2012
comment
так вы говорите, что используя exit(0); это не проблема, но кто-то сказал, что использование выхода (0) не одобрено Apple! - person Neeraj Neeru; 16.03.2012
comment
У меня никогда не было с этим проблем, и это задокументировано и используется вызовом Apple API. - person fbernardo; 16.03.2012
comment
так что я могу позвонить, как если (счетчик == 0.0) { выход (0); - person Neeraj Neeru; 16.03.2012
comment
Если это правильный ответ, пожалуйста, отметьте его и закройте вопрос, если нет, в чем проблема? - person fbernardo; 16.03.2012
comment
В Tech Q&A QA1561 Apple настоятельно не рекомендует использовать выход, так как это создает впечатление сбоя приложения. developer.apple.com/iphone/library/qa/qa2008/qa1561.html - person Neeraj Neeru; 16.03.2012
comment
Вы вырываете это из контекста, Apple говорит, что анимация возврата к Springboard не произойдет, но вы сказали, что хотите выйти из приложения во время сна пользователя, и если вы используете выход (0), он не будет производить журнал сбоев, так что, не могли бы вы объяснить, в этой ситуации, как это выглядело бы сбоем? - person fbernardo; 16.03.2012
comment
И кстати, ваш вариант объясняется Apple в этом вопросе и ответе. Не существует API для изящного завершения приложения iPhone или выхода (), что не рекомендуется. Частные API могут привести к отклонению вашего приложения. - person fbernardo; 16.03.2012

Apple не будет одобрять любое приложение, которое преднамеренно приостанавливает или завершает работу. Вы можете использовать только методы, перечисленные в официальном документации, которая не включает suspend или terminateWithSuccess.

person Tommy    schedule 16.03.2012
comment
tanq для вашего повтора, любой другой способ заморозить процесс подачи заявки, не могли бы вы сообщить мне какое-либо решение ... у моего клиента есть эти требования .. - person Neeraj Neeru; 16.03.2012
comment
Метафора iPhone заключается в том, что все эти приложения существуют, и вы можете входить и выходить из них по своему желанию. Пользователь не должен думать о том, запущены ли конкретные отдельные приложения, и возврат на главный экран всегда должен быть в их распоряжении. Таким образом, в соответствии с рекомендациями Apple, я думаю, вам просто нужно остановить звук и вывести экран, объясняющий, что радио перешло в спящий режим с помощью кнопки или чего-то еще, чтобы вернуться к прослушиванию радио (или, в идеале, вернуться к более ранний экран до начала звука). Это может показаться глупым, но это отношение Apple к рекомендациям по интерфейсу для вас. - person Tommy; 16.03.2012
comment
Мы завершали работу нашего приложения после обновления содержимого в качестве обходного пути, чтобы заставить UIWebView повторно читать файлы (что мы не могли сделать другим способом). Принимая приложение в течение более года с таким подходом, Apple только что начала его отвергать. Мы OEM наше приложение для другой компании, и Apple тоже отклонила его для них, так что я знаю, что это не просто случайный отказ. Похоже, что теперь они отклоняют любое закрывающееся приложение. (Отказ вынудил нас потратить еще несколько дней на поиск решения проблемы UIWebView, которое мы в конце концов нашли.) - person Joshua Smith; 27.06.2012

tanq для ваших повторов, так что я просто забыл о программном выходе из моего приложения. следующий способ — остановить воспроизведение моего объекта MPMoviePlayerController. получил проблему следующего уровня

моя страница настроек для страниц sleepTime и воспроизведения музыки, оба являются разными viewControllers, поэтому я не могу получить доступ к объекту MPMoviePlayerController непосредственно на странице настроек времени, поэтому я создал метод на странице воспроизведения музыки

MPMoviePlayerController *player=[[MPMoviePlayerController alloc]initWithContentURL:[NSURL URLWithString:@"http://www.radioparadise.com/musiclinks/rp_64aac.m3u"]];
[player prepareToPlay];
[player play];

- (IBAction)StopPlay:(id)sender 
{   
 [player stop];
}

поэтому я создал объект для страницы воспроизведения музыки и вызвал этот метод со страницы настроек. Это мой код в settingsPage

@class MusicPlayingPage;
 @interface secondView : UIViewController
{
MusicPlayingPage *audio; 
}

и вызвал метод в settingsPage

[audio stopPlay];

управление правильно доходит до streamingPage, но кажется, что проигрыватель не останавливает воспроизведение, я не могу получить доступ ни к одной из этих опций проигрывателя [остановка проигрывателя]; , [пауза игрока];

любая проблема для этого метода в musicPlayingPage

- (IBAction)StopPlay:(id)sender 
{   
 [player stop];
}

извините, если мой вопрос не понятен.

person Neeraj Neeru    schedule 17.03.2012