使用AFNetworking 2.x版本的注意啦
2016-05-25 本文已影响2766人
cbd0bfba9942
Reachability 这个类用到的一定要看
因为这个文章讲的就是这个类兼容IPV6的方法
查看项目中 AFNetworkReachabilityManager Class 是否包含AF_INET、struct sockaddr_in 。
如下
+ (instancetype)reachabilityForInternetConnection
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress:&zeroAddress];
}
如果发现项目中使用了,为了适配IPV6,但又不想迁移到 AFNetworking 3.0。那么请你将 最新版 AFNetworking中的AFNetworkReachabilityManager class 替换当前项目中的这个类。
新版本中已经针对系统版本做了单独的处理。
如下:
+ (instancetype)sharedManager {
static AFNetworkReachabilityManager *_sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedManager = [self manager];
});
return _sharedManager;
}
+ (instancetype)manager
{
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
struct sockaddr_in6 address;
bzero(&address, sizeof(address));
address.sin6_len = sizeof(address);
address.sin6_family = AF_INET6;
#else
struct sockaddr_in address;
bzero(&address, sizeof(address));
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
#endif
return [self managerForAddress:&address];
}