iOS开发Swift&Objective-C首页投稿(暂停使用,暂停投稿)

使用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];
}

上一篇下一篇

猜你喜欢

热点阅读