2013-10-02 71 views
1

我正在編寫一個應用程序,用於檢測您何時進入特定位置。當您到達某個位置時,它會檢測到該更改併發送本地通知。當通知被接收並打開時,它應該切換屏幕。該應用程序似乎對我來說工作完美無瑕,但我的測試人員告訴我,屏幕永遠不會爲他切換。爲了重現這個問題,我們去了他的家,他演示了。我注意到的一點是,在進入熱點之前,他首先點擊主頁按鈕,然後讓手機進入睡眠狀態。在執行多次測試後,我們確定如果手機在應用程序仍然打開的情況下進入睡眠狀態,屏幕將會切換。如果我們先將應用程序最小化,然後讓手機進入休眠狀態,屏幕將不會切換。當手機進入睡眠模式時,調用哪種方法與最小化然後進入睡眠狀態目標-c

屏幕不應該切換,直到應用程序與通知打開。我很好奇差別是什麼,如果有委託方法來處理這樣的事件,或者爲什麼會發生這種情況?有任何想法嗎?

編輯

- 代碼與位置相關的服務 -

這是單例類我使用位置服務

@implementation LocationManager 

static LocationManager *locationManager; 

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

    return locationManager; 
} 

@end 

這是welcomeviewcontroller的代碼實際上實現了委託方法(其長期以來即時只發布重要部分)

- (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文件中設置了適當的標誌。它正在研究我的最後一個版本,但自那時起我沒有太大變化。我不知道爲什麼它不工作。而且,它只在某些領域工作。它檢測到它在熱點中,發送通知來提醒我它已經到達那裏,但是當它切換視圖控制器時,只有在您收到通知之前按下主頁按鈕然後讓手機進入睡眠狀態,它纔會起作用。如果應用程序保持打開狀態,或者只是簡單地點擊主頁按鈕,它就會正確切換。我觀察了Xcode中的內存和CPU管理,當我最小化並進入睡眠狀態時,整個過程和內存都在地板上掉下來了,但當我只是睡覺時,卻不會。我相信,即使手機已經睡着,手機也不會將其視爲「在後臺」,直到最小化爲止。也許我錯了。

在appdelegate中,我設置它來檢測它是否進入前景或沒有標誌。但是,無論如何,如果應用程序是從通知打開的,它應該將控制權發送給didreceivelocalnotification方法嗎?

+0

您如何檢測位置?顯示代碼。 – Wain

+0

singleton類,locationmanager,並且委託被設置爲一個名爲WelcomeViewController的類。委託方法處理一堆東西。生病發布在 – Katushai

+0

以上編輯全部爲什麼不使用'CLLocationManager'的區域監控? – Wain

回答

0

我假設你在– application:didReceiveLocalNotification:執行切換你有沒有嘗試過從- (void)applicationDidEnterBackground:(UIApplication *)application提交本地通知? Here是本地通知的實施示例

+0

是的,這是正確的,那即時通訊顯示代碼。此外,通知在他們進入特定位置時發送,而不是在他們進入後臺時發送 – Katushai

相關問題