0

我有一个按钮,按下时会创建一个对象thing。然后它会休眠十秒钟,然后调用thing.go它来获取应用程序状态,例如

UIApplicationState state = [[UIApplication sharedApplication] applicationState];

然后按照这个问题的答案和评论,我检查应用程序是否在后台,如果是,它会显示本地通知。

所以我按下按钮并立即按下主页键进入主屏幕(从而将应用程序置于后台)

但是,我可以看出 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;
}
4

2 回答 2

1

你几乎不应该使用睡眠。忘记它的存在。它锁定了你的应用程序,没有任何变化,包括到后台的转换。

您要做的是设置一个 10 秒的计时器,然后调用 thing.go。

但是,由于通常计时器不在后台运行,这将变得复杂。事实上,除非您采取特殊步骤,否则您的应用程序不会在后台获得任何处理器时间。你被告知你要去后台,然后你得到的下一个电话是返回到前台。

当您的应用程序收到一条消息说它正在发送到后台时,它需要进行系统调用来询问后台处理时间。(我不记得我脑海中的那个电话,并且目前没有运行 Xcode。)

Apple 更改了 iOS 7 中后台处理的规则,但您说这是 iOS 6,因此这些更改不适用。

于 2013-10-26T02:44:49.197 回答
0

如果我理解正确,您正在检查应用程序是从本地通知返回还是已经处于活动状态?

if (state == UIApplicationStateActive) {
   // do something
   NSLog(@"application was active ");
} else {
   NSLog(@"sent from notification");
}
于 2013-10-26T02:48:07.990 回答