我正在为内部企业应用程序创建更新方法。我想创建的是一个我可以快速放入应用程序的类,它将检查服务器是否需要更新。这是我到目前为止,它检查正确,但它返回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。我需要它是一个异步的,因为应用程序将检查的服务器在我们的防火墙后面。所以如果这个人在防火墙之外,当无法到达服务器时,应用程序需要继续。我是朝着正确的方向前进,还是有更好的方法?
所以这对我来说是一个全新的东西,我只是想让我的头在这附近。你能告诉我更多我将如何实现这一点? – Jonathan 2013-02-27 18:51:58
修改了一些答案,让你走上正轨。请注意我添加的有关使用相同逻辑的评论。把你所有的逻辑放在那个地方。我已经包含了一小段代码,以便您可以获得更好的方向。 – Jeremy 2013-02-27 19:06:49
在我的第二个示例中,当您的更新检查完成时,将调用您提供的代码块(大括号之间的内容)。这被称为回调,这意味着,当你检查我的更新时,我知道了,所以我可以做一些关于它的事情。 – Jeremy 2013-02-27 19:12:28