2012-11-12 22 views
1

我正在使用Enterprise開發程序推出一個內部IOS應用程序。我處於一個可以讓用戶觸摸一個從App內下載並安裝升級的VC的階段。有誰知道如何檢測用戶是否取消了「In App」嘗試安裝另一個App版本

它運作良好。然而,如果網絡速度有點慢,IOS會提示用戶發出的信息「你想安裝嗎,這麼那麼......」似乎有點晚了。因此,在用戶按下「安裝」按鈕後,我將其禁用。但是,如果用戶觸摸,當IOS提示「取消」時,我不知道如何檢測到這一點。

我使用的Xcode 4.5和IOS6.0在多個設備上iPhone 3,4和5

不給整個鏈路散開,不會下載的是如下的代碼。

- (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)buttonIndex { 

if (buttonIndex == 0) { 

    [self.IBOInstallActivityInd startAnimating]; 
    [self enableInstallButton:NO]; 
    self.tabBarController.tabBar.userInteractionEnabled = NO; 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:APP_INSTALL_FROM]]; 

    } 

} // actionSheet:clickedButtonAtIndex 

而且,正如我所說的,它是好的 - 它的工作原理。但是,如果用戶觸摸「取消」提示,我想能夠告訴。正如你所看到的,我鎖定了用戶界面。你可能會問爲什麼,如果一個應用程序即將關閉並獲得升級。

那麼,根據網絡速度,我想證明用戶不止一次點擊按鈕。但是,如果用戶取消,我想處於可以重新啓動用戶界面,啓用標籤欄等的位置...

我爬過網絡,發現什麼都沒有!而且,我想蘋果網站上的答案就像Probs一樣好。但是,這需要大量的閱讀。

有沒有人有任何想法呢?

回答

2

我不知道如何捕獲取消操作,但我可以告訴你我們是如何處理這種情況的。

我們編譯的每個版本都內置了一個特定的修訂版本,我們也將其嵌入到我們服務器上的plist文件中。我們的應用程序比較兩個版本號來確定是否有更新(版本不匹配,這也允許我們回滾)。

就你而言,你可以做的只是讓VC每隔X秒驗證一次服務器並刷新狀態。如果他們進行升級,他們將從應用程序啓動,如果他們不這樣做,則刷新將使該按鈕再次啓用。

更簡單的解決方案:只有在它們導航到VC時才運行此查詢。所以如果他們取消,他們將不得不退出VC並重新進入。

下面是解析plist文件看起來像我們:

  NSString *localCopyPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
      localCopyPath = [localCopyPath stringByAppendingPathComponent:@"MDM_SERVER.plist"]; 
      NSFileManager *fileManager = [[NSFileManager alloc] init]; 

      BOOL created = [fileManager createFileAtPath:localCopyPath contents:plistData attributes:nil];     
      if (created) { 
       NSDictionary *fullDict = [NSDictionary dictionaryWithContentsOfFile:localCopyPath]; 
       if (fullDict) { 
        NSArray *a = [fullDict objectForKey:@"items"]; 
        NSDictionary *mdmDict = [a objectAtIndex:0]; 
        NSDictionary *metaDict = [mdmDict objectForKey:@"metadata"]; 

        // String of format "1.0.1779" 
        NSString *serverFullVersion = [metaDict objectForKey:@"bundle-version"]; 

        // We will always compare on the last digit 
        NSUInteger lastPeriod = [serverFullVersion rangeOfString:@"." options:NSBackwardsSearch].location; 
        if (NSNotFound != lastPeriod && [serverFullVersion length] > lastPeriod) { 
         // update the time when we found an answer 
         mdmCheckedAt = [NSDate date]; 
         NSString *serverSvnRevision = [serverFullVersion substringFromIndex:(lastPeriod + 1)]; 
         // the big test - if our own svn version is different, then load the 
         // URL to tell iOS to upgrade ourself 
         if (![kRevisionNumber isEqualToString:serverSvnRevision]) { 
// Your Code HERE 
+0

乾杯,邁克爾 - 有點晚在回答 - 我給那個前。非常感謝。 –

相關問題