ios - 当电话进入休眠状态与最小化然后在 objective-c 中进入休眠状态时调用哪些方法

标签 ios objective-c cocoa-touch

我正在编写一个应用程序来检测您何时进入特定位置。当您到达某个位置时,它会检测到变化并发送本地通知。当收到通知并打开时,应该会切换屏幕。该应用程序似乎对我来说工作完美,但我的测试员告诉我屏幕永远不会为他切换。为了重现这个问题,我们去了他家,他演示了。我注意到的是,在进入热点之前,他先按下主页按钮,然后让手机进入休眠状态。在执行多项测试后,我们确定如果手机在应用程序仍然打开的情况下简单地进入休眠状态,屏幕将会切换。如果我们先最小化应用程序然后让手机进入休眠状态,则屏幕永远不会切换。

在打开应用程序并收到通知之前,屏幕不应切换。我很好奇有什么区别,是否有委托(delegate)方法来处理这样的事件,或者为什么会发生这种情况?有什么想法吗?

编辑

-- 定位服务相关代码--

这是我用于定位服务的单例类

@implementation LocationManager

static LocationManager *locationManager;

+ (LocationManager *)locationManager {
    if (locationManager == NULL) {
        locationManager = [[LocationManager alloc] init];
    }

    return locationManager;
}

@end

这是 welcomeviewcontroller 中实际实现委托(delegate)方法的代码(它很长所以我只发布重要部分)

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    if ([self getAppState] == TRACKING_HOTSPOT) {
        NSLog(@"\nLAT: %f\nLNG: %f", [self deviceLatitude], [self deviceLongitude]);
        for (int j = 0; j < [MinX count]; j++) {
            if ((([self deviceLatitude] > [MinX[j] floatValue] && [self deviceLatitude] < [MaxX[j] floatValue]) && ([self  deviceLongitude] > [MinY[j] floatValue] && [self deviceLongitude] < [MaxY[j] floatValue]))) {
                if ([self testCells: [CellId[j] intValue]]) {
                    [self.delegate setNum: [CellId[j] intValue]];
...
}

我还在 info.plist 文件中设置了适当的标志。它在我的最后一个版本上工作,但从那以后我真的没有太大改变。我不知道为什么它不起作用。而且,它只在某些领域有效。它检测到它在热点中,发送通知提醒我它去了那里,但是当它切换 View Controller 时,只有当你按下主页按钮然后让手机在收到通知之前进入休眠状态时它才会工作。如果应用程序保持打开状态或者您只需按下主页按钮,它就会正确切换。我在整个过程中观察了 Xcode 中的内存和 CPU 管理,当我最小化并进入休眠状态时,内存从地板上掉下来,但当我只是进入休眠状态时却没有。我相信即使手机处于 sleep 状态,手机也可能在最小化之前不会“在后台”考虑它。也许我错了。

在 appdelegate 中,我将其设置为检测它是否使用标志进入前台。但无论如何,如果应用程序是从通知中打开的,它应该将控制权发送给 didreceivelocalnotification 方法,对吗?

最佳答案

我假设您在 中执行了切换 – application:didReceiveLocalNotification: 您是否尝试过从 - (void)applicationDidEnterBackground:(UIApplication *)application 显示本地通知? Here是本地通知的实现示例

关于ios - 当电话进入休眠状态与最小化然后在 objective-c 中进入休眠状态时调用哪些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142345/

相关文章:

ios - 在 Web View 中生成 PDF 时,如何先将 PDF 数据写入文件

iphone - 如何在 iphone 中以编程方式显示带有按钮的 uipickerview

ios - 图像是由 UIImagePickerControllerSourceTypeCamera 拍摄的如何将其保存在 ios 的数据库中

ios - 从 XML Parse 匹配 NSDictionary

iphone - Cocoa-Touch,核心数据 : Linker error, 未找到 NSManagedObject 符号

objective-c - 在 Objective C 中创建小型实用程序类的推荐方法

ios - 在原型(prototype) tableView 单元格中滚动的问题

ios - 如何取消选择 UITextView 中的文本?

php - 如何使用 Objective-C 在 iOS 上执行相同的加密/解密 PHP 函数?

objective-c - Objective-C : Error when trying to initialize instance of CLLocation