Я определил экспериментально, используя пару устройств, которые (насколько я могу судить), устройства iOS под управлением iOS 4, вызывают applicationWillResignActive, когда переходят в спящий режим (либо когда пользователь нажимает верхнюю правую кнопку, либо когда экран выключается из-задо бездействия, но приложение все еще работает), но устройства под управлением iOS 5 вызывают applicationDidEnterBackground, когда это происходит, и вызывают только applicationWillResignActive для чего-то вроде входящего текстового сообщения / телефонного звонка или пользователя, опускающего панель уведомлений (другими словами,очень временные события).
Устройство iOS, которое идет в спячку, однако, это не очень короткое событие (может быть очень длинным), и поэтому в этом случае я бы хотел отменить текущий вызов сервера,что я не должен делать (и не хочу делать) для очень коротких перерывов.
Мой вопрос: есть ли способ узнать, когда приложение зашло в сон, в отличие от любого другогоболее короткое прерывание (т.е. текстовое сообщение) и / или, альтернативно, кто-нибудь знаетага, если мое предположение о том, что устройства iOS 4 vs 5 вызывают, когда они засыпают, действительно верно?
Это то, что у меня есть сейчас, в applicationWillResignActive:
if ([[[UIDevice currentDevice]systemVersion] hasPrefix:@"4"] ) {
//cancel server call
}
Это работаетхорошо, насколько я могу судить, но каждый поток, который я прочитал о том, как определить версию iOS на устройстве, говорит, что вы не должны использовать этот код, если это возможно, и вместо этого должен вызвать правильный селектор для того, что вы пытаетесьделать.Но я понятия не имею, что это будет в этом случае.