iOS10升级近在眼前,最近在自己目前维护的项目中发现一个坑,在系统升为10的时候会出现问题,希望大家引以为鉴。
在很多项目中有类似下面这样的宏,用来比较系统版本号:
#define VERSION_ABOVE(version) (([[[UIDevice currentDevice] systemVersion] compare:version]) != NSOrderedAscending)
这个宏是将版本号转换成字符串进行比较。
譬如:VERSION_ABOVE(@"7.0")
,如果当前系统是9.0
,则是将字符串@"9.0"
与字符串@"7.0"
比较,返回结果正确;但是如果当前系统是10.0
,则是将字符串@"10.0"
与字符串@"7.0"
,结果会显示当前系统比7.0
小,因为字符串是是从第一位字符开始比较。
建议将该宏改成:
#define VERSION_ABOVE(version) (([[[UIDevice currentDevice] systemVersion] floatValue]) >= (version))
将系统版本号转为浮点数类型进行比较,Xcode会报错相应的地方,因为旧项目version是作为字符串传入,所以可以去报错的地方将version改为浮点数即可。
若是不想修改旧项目相应的地方,可以将宏改为:
#define VERSION_ABOVE(version) (([[[UIDevice currentDevice] systemVersion] floatValue]) >= ([version floatValue]))