2013-10-26 3 views
0

У меня есть кнопка, которая при нажатии создает объект thing. Затем он спит в течение десяти секунд, а затем вызывает thing.go, который получает состояние приложения, какДисплей applicationState iOS

UIApplicationState state = [[UIApplication sharedApplication] applicationState]; 

Тогда следующий ответа и комментариев this Вопроса, я проверить, если приложение работает в фоновом режиме, и если да, то она отображает местное уведомление.

Так я нажимаю кнопку и сразу же нажмите домашнюю кнопку, чтобы перейти к главному экрану (поставив тем самым приложение в фоновом режиме)

Однако, я могу сказать, что если оператор возвращает ложь, и поэтому не выполнение любого кода внутри (путем размещения NSLog внутри оператора if).

Итак, мой следующий мыслительный процесс состоял в том, чтобы каким-то образом показать дату на консоли, используя NSLog(state). Очевидно, я не могу этого сделать.

Итак, как я могу показать applicationState для решения моей проблемы? Или есть другой способ проверить, работает ли приложение в фоновом режиме в методе этого класса?

Вот go функция, которая вызывается внутри IBAction при нажатии кнопки

-(void)go { 
    if (state == UIApplicationStateBackground) { 
     NSLog(@"App is in background"); 
    } 
} 

Вот IBAction, который связан с кнопкой, т.е. запускается при нажатии кнопки

- (IBAction)button_help { 
    myclass* thingy = [[myclass alloc] init]; 
    sleep(10); 
    thingy.go; 
} 
+0

код добавлен только для вас Zaph :) –

+4

FYI - это плохая практика вызова методов с использованием обозначения свойств, даже если она работает. Вызовите метод 'go' следующим образом:' [thingy go]; '. – rmaddy

+0

Можете ли вы не просто использовать метод 'applicationDidEnterBackground', чтобы сделать то, что вы хотите сделать? https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html # // apple_ref/occ/intfm/UIApplicationDelegate/applicationDidEnterBackground: – Popeye

ответ

1

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

Что вы хотите сделать, так это установить таймер на 10 секунд, чтобы затем вызвать thing.go.

Однако это осложняется тем, что обычно таймеры не работают в фоновом режиме. Фактически, если вы не предпримете специальные шаги, ваше приложение не получит процессорного времени в фоновом режиме. Вам говорят, что вы идете на задний план, а затем следующий звонок, который вы получаете, - это возврат к офису.

Когда ваше приложение получает сообщение о том, что оно отправляется на задний план, ему необходимо будет сделать системный вызов, запрашивающий время фоновой обработки. (Я не помню, чтобы звонок был у меня на голове, и на данный момент не работает Xcode.)

Apple изменила правила обработки фона в iOS 7, но вы говорите, что это iOS 6, поэтому эти изменения не применяются.

+0

Кажется на ходу, хотя я бы хотел, чтобы вы были более конкретными. –

0

Если я правильно понял, вы проверяете, возвращается ли приложение из локального уведомления или если оно уже активировано?

if (state == UIApplicationStateActive) { 
    // do something 
    NSLog(@"application was active "); 
} else { 
    NSLog(@"sent from notification"); 
} 
+0

thats right, я проверил, было ли приложение в bg, хотя. –

+0

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html Поиск приложения didReceiveLocalNotification: и приложение didFinishLaunchingWithOptions. – Edward

+0

Я действительно смотрел на это. Но это не то, о чем я прошу. –

Смежные вопросы