【问题标题】:Display applicationState iOS显示应用状态 iOS
【发布时间】:2013-10-26 02:01:41
【问题描述】:

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

UIApplicationState state = [[UIApplication sharedApplication] applicationState];

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

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

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

【问题讨论】:

标签: ios objective-c


【解决方案1】:

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

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

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

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

Apple 在 iOS 7 中更改了后台处理规则,但你说这是 iOS 6,所以这些更改不适用。

【讨论】:

  • 似乎步入正轨,但我希望你能更具体一点。
【解决方案2】:

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

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

【讨论】:

  • developer.apple.com/library/ios/documentation/… 查找应用程序 didReceiveLocalNotification: 和应用程序 didFinishLaunchingWithOptions。
  • 我确实看过。但这不是我要问的。
  • 好的 - 你刚刚对我的问题说“这是正确的”,这就是答案。在重新阅读您的问题以尝试弄清楚您的意思后,我假设您想在后台安排通知,这意味着您需要查看 developer.apple.com/library/ios/documentation/iphone/conceptual/… ,特别是后台执行。
  • 您正在检查应用程序是否从本地通知返回如果它已激活或未激活,您的意思是什么?跨度>
猜你喜欢
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
相关资源
最近更新 更多