1

我正在使用企业开发计划推出一个内部 IOS 应用程序。我正处于一个阶段,我有一个 VC,它允许用户触摸一个按钮,从应用程序内部下载并安装升级。

它运作良好。但是,如果网络有点慢,则向用户抛出的 IOS 提示消息“您要安装,某某...”似乎有点晚了。因此,在用户按下“安装”按钮后,我将其禁用。但是,如果有用户在 IOS 提示时触摸“取消”,我不知道如何检测到这一点。

我在 iPhone 3、4 和 5 的多个设备上使用 Xcode 4.5 和 IOS6.0。

在不提供整个链接的情况下,下载代码如下。

- (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

而且,正如我所说,它很好——它有效。但是,如果用户在提示中触摸“取消”,我希望能够分辨出来。如您所见,我正在锁定用户界面。你可能会问为什么,如果一个应用程序即将关闭并接受它的升级。

好吧,根据网络速度,我想证明用户不止一次点击按钮。但是,如果用户取消,我希望能够重新启动用户界面,启用标签栏等......

我已经爬网,什么也没找到!而且,我想答案是 Apple 网站上的问题,尽管它很好。但是,它需要大量的阅读。

有没有人有任何想法?

4

1 回答 1

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
于 2012-11-12T18:22:16.237 回答