我有一个按钮,按下时会创建一个对象thing
。然后它休眠十秒钟,然后调用thing.go
,它获得应用程序状态,如
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
然后在 this 问题的答案和评论之后,我会检查该应用是否在后台,如果是,则会显示本地通知。
所以我按下按钮并立即按主页键进入主屏幕(从而将应用程序放在后台)
但是,我可以告诉if语句返回false,因此不执行任何代码(通过在if语句中放置NSLog)。
所以我的下一个思考过程是以某种方式使用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 :(得分:1)
你几乎不应该使用睡眠。忘了它存在。它会锁定您的应用程序,并且不会发生任何变化,包括过渡到后台。
你想要做的是设置一个10秒的计时器然后调用thing.go。
但是,通常计时器不在后台运行会使事情复杂化。实际上,除非您采取特殊步骤,否则您的应用程序不会在后台获得任何处理器时间。你被告知你要去后台,然后你接下来的电话就是返回前期。
当您的应用收到正在发送到后台的消息时,需要进行系统调用,询问后台处理时间。 (我不记得我头顶的电话了,目前还没有运行Xcode。)
Apple更改了iOS 7中的后台处理规则,但您说这是iOS 6,因此这些更改不适用。
答案 1 :(得分:0)
如果我理解正确,您正在检查应用是否从本地通知返回,或者它是否已处于活动状态?
if (state == UIApplicationStateActive) {
// do something
NSLog(@"application was active ");
} else {
NSLog(@"sent from notification");
}