iOS 版本升级

#import <Foundation/Foundation.h>

#import "UIAlertView+Blocks.h"


@interface CheckUpgradeUtil : NSObject


/**

    检查app更新

 */

+(void)checkUpgrade;


/**

    获取app版本

 */

+(NSString *)getCurrentAppVersion;


@end


#import "CheckUpgradeUtil.h"

#import "AFNetworking.h"


#define APP_ID @"1118368178"

@implementation CheckUpgradeUtil


//检查更新

+(void)checkUpgrade{

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.securityPolicy = [AFSecurityPolicy defaultPolicy];

    NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/lookup?id=%@",APP_ID];

    [manager POST:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSInteger resultCount = [[responseObject objectForKey:@"resultCount"] integerValue];

        if(resultCount != 0){

            NSString *appstoreVersion = [[responseObject objectForKey:@"results"][0] objectForKey:@"version"];

            if(appstoreVersion != nil){

                NSString *localVersion = [self getCurrentAppVersion];

                //NSLog(@"latest app version %@ ; localVersion:%@",appstoreVersion,localVersion);

                CGFloat local = [localVersion floatValue];

                CGFloat appstore = [appstoreVersion  integerValue];

                

                if(local < appstore){

                    [UIAlertView displayAlertWithTitle:@"版本更新提示" message:@"发现新版本,是否确定要更新?" leftButtonTitle:@"取消" leftButtonAction:nil rightButtonTitle:@"更新" rightButtonAction:^(){

                        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/jie-zou-da-shi/id%@?mt=8", APP_ID]]];

                    }];

                }

            }

        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        //NSLog(@"error ----%@",error.userInfo);

    }];

}


+ (NSString *)getCurrentAppVersion

{

    NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];

    NSString *version = [infoDict objectForKey:@"CFBundleShortVersionString"];

    return version;

}


@end


#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>


@interface UIAlertView (Blocks)<UIAlertViewDelegate>



+ (void) displayAlertWithTitle:(NSString *)title 

                       message:(NSString *)message

               leftButtonTitle:(NSString *)leftButtonTitle

              leftButtonAction:(void (^)(void))leftButtonAction

              rightButtonTitle:(NSString*)rightButtonTitle

             rightButtonAction:(void (^)(void))rightButtonAction;




@end


#import "UIAlertView+Blocks.h"

#import <objc/runtime.h>


static NSString *LEFT_ACTION_ASS_KEY = @"com.cancelbuttonaction";

static NSString *RIGHT_ACTION_ASS_KEY = @"com.otherbuttonaction";


@implementation UIAlertView (Blocks)



-(id)initWithTitle:(NSString *)     title 

           message:(NSString *)     message

   leftButtonTitle:(NSString *)     leftButtonTitle

  leftButtonAction:(void (^)(void)) leftButtonAction

  rightButtonTitle:(NSString*)      rightButtonTitle

 rightButtonAction:(void (^)(void)) rightButtonAction

{

  if((self = [self initWithTitle:title 

                         message:message 

                        delegate:self

               cancelButtonTitle:leftButtonTitle

               otherButtonTitles:rightButtonTitle, nil]))

  {

    // We might get nil for one or both block inputs.  To 

    

    

    // Since this is a catogory, we cant add properties in the usual way.

    // Instead we bind the delegate block to the pointer to self.

    // We use copy to invoke block_copy() to ensure the block is copied off the stack to the heap

    // so that it is still in scope when the delegate callback is invoked.

    if (leftButtonAction) 

    {

      objc_setAssociatedObject(self, (__bridge const void *)(LEFT_ACTION_ASS_KEY), leftButtonAction, OBJC_ASSOCIATION_COPY_NONATOMIC);

    }

    

    if (rightButtonAction) 

    {

      objc_setAssociatedObject(self, (__bridge const void *)(RIGHT_ACTION_ASS_KEY), rightButtonAction, OBJC_ASSOCIATION_COPY_NONATOMIC);

    }

    

    if (!leftButtonAction && !rightButtonAction)

    {

        self.delegate = nil;

    }

  }

  return self;

}



// This is a convenience wrapper for the constructor above

+ (void) displayAlertWithTitle:(NSString *)title 

                       message:(NSString *)message

               leftButtonTitle:(NSString *)leftButtonTitle

              leftButtonAction:(void (^)(void))leftButtonAction

              rightButtonTitle:(NSString*)rightButtonTitle

             rightButtonAction:(void (^)(void))rightButtonAction

{

  UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title 

                                                      message:message

                                              leftButtonTitle:leftButtonTitle

                                             leftButtonAction:leftButtonAction

                                             rightButtonTitle:rightButtonTitle

                                            rightButtonAction:rightButtonAction];

  [alertView show];

}


- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex

{

  // Decalare the block variable

  void (^action)(void) = nil;

  

  // Get the block using the correct key 

  // depending on the index of the buttom that was tapped

  if (buttonIndex == 0

  {

    action  = objc_getAssociatedObject(self, (__bridge const void *)(LEFT_ACTION_ASS_KEY));

  } 

  else if (buttonIndex == 1)

  {

    action  = objc_getAssociatedObject(self, (__bridge const void *)(RIGHT_ACTION_ASS_KEY));

  }

  

  // Invoke the block if we have it.

  if (action) action();

  

  // Unbind both blocks from ourself so they are released

  // We assign nil to the objects wich will release them automatically

  objc_setAssociatedObject(self, (__bridge const void *)(LEFT_ACTION_ASS_KEY), nil, OBJC_ASSOCIATION_COPY);

  objc_setAssociatedObject(self, (__bridge const void *)(RIGHT_ACTION_ASS_KEY), nil, OBJC_ASSOCIATION_COPY);


}


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值