2015-02-12 45 views
1

我正在使用運動活動管理器(更詳細 - 計步器)的iOS應用程序中工作。當應用程序啓動時,我需要檢查運動活動是否被用戶允許。我做iPhone - 請求運動活動

_motionActivityManager = [[CMMotionActivityManager alloc] init]; 
_pedometer = [[CMPedometer alloc] init]; 
[_pedometer queryPedometerDataFromDate : [NSDate date] 
           toDate : [NSDate date] 
          withHandler : ^(CMPedometerData *pedometerData, NSError *error) { 
            // BP1 
            if (error != nil) { 
             // BP2 
            } 
            else { 
             // BP3 
            } 
           }]; 

這樣做,因爲這裏☛iOS - is Motion Activity Enabled in Settings > Privacy > Motion Activity

在我的理解中討論此代碼將觸發「警報窗口」,要求用戶選擇加入/退出。

在我的情況會發生什麼事是,當我運行的應用程序首次(又名。所有的警告被複位),應用「BP1」(永遠不會執行回調)前掛機,然後,如果我停止的應用程序和Xcode或按出現主窗口「警告窗口」。如果我選擇了一切都很好,那麼第二次運行'BP3'(如果我選擇退出,則爲'BP2')。

我試圖做什麼遠:

  • 我實現了使用異步執行

    [_pedometer queryPedometerDataFromDate : [NSDate date] 
               toDate : [NSDate date] 
              withHandler : ^(CMPedometerData *pedometerData, NSError *error) { 
              // Because CMPedometer dispatches to an arbitrary queue, it's very important 
              // to dispatch any handler block that modifies the UI back to the main queue. 
              dispatch_async(dispatch_get_main_queue(), ^{ 
               authorizationCheckCompletedHandler(!error || error.code != CMErrorMotionActivityNotAuthorized); 
              }); 
    }]; 
    

這不掛檢查應用程序的另一種方式,但「警報窗口」被從未顯示

  • 我執行了這個「檢查snipp et「在以後的代碼 - 但再次 - 應用程序掛起

回答

0

本質上,使用可以首先確保警報視圖不會阻止您的應用程序,當第一個視圖出現,即。在onViewDidAppear。

例如做:

-(void) viewDidAppear:(BOOL)animated { 
    if ([MyActivityManager checkAvailability]) { // motion and activity availability checks 
     [myDataManager checkAuthorization:^(BOOL authorized) { // is authorized 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if (authorized) { 
        // do your UI update etc... 
       } 
       else { 
        // maybe tell the user that this App requires motion and tell him about activating it in settings... 
       } 
      }); 
     }]; 
    } 
} 

這是我自己做的。我也基於Apple示例代碼基於我的應用程序,並注意到,該示例還存在您所描述的問題。

+0

沒有訣竅 - 所以底線 - **使支持視圖加載之前檢查被稱爲** – ajitam 2015-02-12 10:49:30