我正在使用企业开发计划推出内部IOS应用程序。我正处于一个可以让用户触摸按钮的阶段,该按钮从应用程序内部下载并安装升级。
效果很好。但是,如果网络速度有点慢,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网站上的问题,就像它一样好。但是,这需要大量的阅读。
有没有人有任何想法?
答案 0 :(得分: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