我正在为内部企业应用程序创建更新方法。我要创建的是一个可以快速放入应用程序的类,如果需要更新,它将与服务器检查。这就是我到目前为止所拥有的,它检查正确,但它NO
在完成方法之前返回。
在我的 checkUpdate.h
@interface checkForUpdate : NSObject
+ (BOOL)updateCheck;
@end
在我的 checkUpdate.m
#import "checkForUpdate.h"
@implementation checkForUpdate
BOOL needsUpdate
NSDictionary *versionDict;
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
+ (BOOL)updateCheck {
NSString *urlStringVersion = [[NSString alloc] initWithFormat:@"http://URL/app_info?app=app"];
NSURL *urlVersion = [NSURL URLWithString:urlStringVersion];
dispatch_async(kBgQueue, ^{
NSData* data =[NSData dataWithContentsOfURL:urlVersion];
if (data){
NSError* error;
NSArray* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (json != nil && [json count] != 0) {
versionDict = [json objectAtIndex:0];
CGFloat serverVersion = [[versionDict valueForKey:@"version"]floatValue];
CGFloat appVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey] floatValue];
NSLog(@"Server Version %f",serverVersion);
NSLog(@"App Version %f",appVersion);
if ([versionDict count] != 0){
if (serverVersion > appVersion){
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
needsUpdate = YES;
}else{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
needsUpdate = NO;
}
}
}
}
});
return needsUpdate;
}
@end
我这样称呼它
NSLog(@"Needs Update %@",[checkForUpdate checkForUpdateWithResponse] ? @"Yes":@"No");
这是我的日志
Needs Update No
Server Version 2.000000
App Version 1.000000
我不确定为什么它甚至在检查之前就返回 NO。我需要它是异步的,因为应用程序将检查的服务器位于我们的防火墙后面。因此,如果此人在防火墙之外,则应用程序需要在无法访问服务器时继续。我是朝着正确的方向前进,还是有更好的方法?