iOS11网络类型判断(iPhoneX获取网络类型闪退)

2023-11-01

简介:

    在之前的项目中,很多是使用导航栏中视图层,通过KVC来获取网络状态,感觉这个方法有些投机取巧,到了iOS11,iPhoneX的导航栏视图层也进行了修改,除了蛋疼的UI,在获取使用以前获取网络状态的方法时候,果然炸了-_-

解决方案:

可以使用Reachability 的方案来解决该问题,GitHub地址,也可以去CSDN资源页下载。

OC代码:

#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>

//! Project version number for MacOSReachability.
FOUNDATION_EXPORT double ReachabilityVersionNumber;

//! Project version string for MacOSReachability.
FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[];

/** 
 * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X.
 *
 * @see http://nshipster.com/ns_enum-ns_options/
 **/
#ifndef NS_ENUM
#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
#endif

extern NSString *const kReachabilityChangedNotification;

typedef NS_ENUM(NSInteger, NetworkStatus) {
    // Apple NetworkStatus Compatible Names.
    NotReachable = 0,
    ReachableViaWiFi = 2,
    ReachableViaWWAN = 1
};

@class Reachability;

typedef void (^NetworkReachable)(Reachability * reachability);
typedef void (^NetworkUnreachable)(Reachability * reachability);
typedef void (^NetworkReachability)(Reachability * reachability, SCNetworkConnectionFlags flags);


@interface Reachability : NSObject

@property (nonatomic, copy) NetworkReachable    reachableBlock;
@property (nonatomic, copy) NetworkUnreachable  unreachableBlock;
@property (nonatomic, copy) NetworkReachability reachabilityBlock;

@property (nonatomic, assign) BOOL reachableOnWWAN;


+(instancetype)reachabilityWithHostname:(NSString*)hostname;
// This is identical to the function above, but is here to maintain
//compatibility with Apples original code. (see .m)
+(instancetype)reachabilityWithHostName:(NSString*)hostname;
+(instancetype)reachabilityForInternetConnection;
+(instancetype)reachabilityWithAddress:(void *)hostAddress;
+(instancetype)reachabilityForLocalWiFi;

-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref;

-(BOOL)startNotifier;
-(void)stopNotifier;

-(BOOL)isReachable;
-(BOOL)isReachableViaWWAN;
-(BOOL)isReachableViaWiFi;

// WWAN may be available, but not active until a connection has been established.
// WiFi may require a connection for VPN on Demand.
-(BOOL)isConnectionRequired; // Identical DDG variant.
-(BOOL)connectionRequired; // Apple's routine.
// Dynamic, on demand connection?
-(BOOL)isConnectionOnDemand;
// Is user intervention required?
-(BOOL)isInterventionRequired;

-(NetworkStatus)currentReachabilityStatus;
-(SCNetworkReachabilityFlags)reachabilityFlags;
-(NSString*)currentReachabilityString;
-(NSString*)currentReachabilityFlags;

@end

代码概要:

1.Reachability中,包含了三个枚举类型,分别代表无网络,WiFi网络,数据网络

    NotReachable = 0,

    ReachableViaWiFi = 2,

    ReachableViaWWAN = 1

2.也可以使用

-(BOOL)isReachable;
-(BOOL)isReachableViaWWAN;

-(BOOL)isReachableViaWiFi;

三个方法来获取当前是否支持某种网络类型

使用方式:

1.将Reachability.h和Reachability.m拷贝到工程中,代码中导入Reachability.h

2.获取网络类型代码:

BOOL isExistenceNetwork = YES;
Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch ([reach currentReachabilityStatus]) {
	case NotReachable:
		isExistenceNetwork = NO;
		NSLog(@"Current Reachability Status : notReachable");
		break;
	case ReachableViaWiFi:
		isExistenceNetwork = YES;
		NSLog(@"Current Reachability Status : WIFI");
		break;
	case ReachableViaWWAN:
		isExistenceNetwork = YES;
		NSLog(@"Current Reachability Status : 3/4G");
		break;
	default:
		break;
}
使用网络连接至''www.apple.com'',可以自定义。。此时可以根据当前网络连接状态,获取是使用哪种类型。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS11网络类型判断(iPhoneX获取网络类型闪退) 的相关文章

随机推荐

  • JavaScript刷新页面的方法(包括Frame框架的刷新方式)

    JavaScript刷新页面的方法 1 history go 0 去指定的某页 2 window location reload 刷新当前页面 window location reload true 在实际应用的时候 重新刷新页面的时候 我
  • 最全ASCII对应码表-键值

    OCT 八进制 最全ASCII码对应表 与键盘按键对应值 二进 Bin 十进 Dec 十六进 Hex 缩写 字符 解释 0000 0000 0 00 NUL null 空字符 0000 0001 1 01 SOH start of hand
  • NVIDIA_Tesla_V100_SXM2_32_GB加速卡详细参数

    记录了NVIDIA Tesla V100 SXM2 32 GB加速卡的详细参数 参考链接 https www xincanshu com gpu NVIDIA Tesla V100 SXM2 32 GB canshu html 主要参数 参
  • CLion运行QtCreator项目的基础配置

    目的 配置Clion 打开QtCreator项目 惯于idea ideavim的操作快捷键 加上QtCreator上手不熟悉且不够优雅 选择使用Clion尝试开发 在网上收集资料 加上本地调试 特此记录 1 前提和本次配置软件版本 系统Wi
  • C++知识目录

    1 C STL基本容器使用 https www cnblogs com cxq0017 p 6555533 html tag 顺序容器 关联容器 vector list deque map set map和set还可以看这一篇 https
  • 字符串与内存函数总结

    前言 个人主页 勇敢的小牛儿 推荐专栏 C语言知识点 座右铭 敢于尝试才有机会 今日鸡汤 A person who has never doubted the direction and goal of life will never de
  • 稳压二极管和雪崩二极管的工作原理及选型学习总结

    本篇文章将讲述常见二极管的工作原理 功能及如何选型 小白总结 如有错误 请大神指教 一 稳压二极管 1 工作原理 如图 伏安特性可知 反向通电尚未击穿前 其两端的电压基本保持不变 这样 当把稳压管接入电路以后 若由于电源电压发生波动 或其它
  • 9个用于本地存储的JavaScript库

    HTML5本地存储API Web存储的一部分 具有出色的浏览器支持 并且正在越来越多的应用程序中使用 它具有简单的API 当然也有其缺点 类似于cookie 在过去的一年左右的时间里 我遇到了许多使用localStorage API的工具和
  • Hadoop的一些问题

    关系数据库已经流行很多年 并且Hadoop已经有了HDFS和MapReduce 为什么需要HBase Hadoop可以很少地解决大规模数据的离线批量处理问题 但是 受限于hadoop MapReduce编程框架的高延迟数据处理机制 使得ha
  • https协议

    一 https的简介 HTTPS 全称 Hypertext Transfer Protocol Secure 是以安全为目标的 HTTP 通道 在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 HTTPS 在HTTP 的基础下
  • Doris--基础--4.2--数据导入--Insert Into

    Doris 基础 4 2 数据导入 Insert Into 1 介绍 类似Mysql中的insert语句 方式 通过 insert into table select 的方式从Doris的表中读取数据并导入到另一张表中 通过 insert
  • Ubuntu 安装 .deb文件

    用法 dpkg 选项 lt 命令 gt 命令 i install deb 文件名 R recursive unpack deb 文件名 R recursive A record avail deb 文件名 R recursive confi
  • 游戏开发物理引擎PhysX研究系列:force值与mass值的关系

    参考 What is force mean in unity Unity Forum 结论 force mass gravity 由于精度问题 在unity中看到mass 100 constantforce的force的y 981 物体仍然
  • The endpoint reference (EPR) for the Operation not found 可能问题以及解决办法

    在调用webservice接口的时候一直报The endpoint reference EPR for the Operation not found这个错 最后在Stack Overflow上找到一个 说可能是content type的问
  • DCDC基础(10)-- BUCK电路的CCM和DCM模式

    欢迎关注我的微信公众号 射频工程师的日常 每天给你分享技术干货 以非同步BUCK为例 分享MPS关于开关电源CCM与DCM的培训内容 1 CCM模式 CCM Continuous Conduction Mode 连续导通模式 在一个开关周期
  • 最速曲线及应用

    一起来观赏一下数学之骚美 原文 https tieba baidu com p 3635683462 red tag 0223460281 这事儿和17世纪的一道谜题有关 直到后来微积分被建立起来以后才得正解 虽然问题不难 但结果惊艳 我先
  • 使用gcov和lcov测试代码覆盖率

    参考文章 gcov介绍 gcov是Linux下GCC自带的一个C C 代码覆盖率分析工具 因此只要安装了gcc 就不需要再次安装了 lcov介绍 gcov能够生成代码覆盖信息 但是不够直观 因此需要结合lcov gcovr等前端图形工具才能
  • 流氓ONU问题分析和处理

    1 流氓ONU问题分析和处理 1 1 故障现象描述 故障现象为 1 设备被判定为流氓ONU 2 同一PON口下其他设备都在反复掉线 只有这一台设备一直正常注册 3 设备下所有ONU都在反复上下线 上下线时间没有规律 4 只有几台设备能正常注
  • Windows系统提权姿势

    windows系统提权 权限提升简介 权限提升概述 什么是提权 提权分类 提权条件 Windows提权思路 Windows系统提权 Windows提权信息收集 WMIC信息收集 自动信息收集 提权工具脚本 环境搭建 提权 Windows内核
  • iOS11网络类型判断(iPhoneX获取网络类型闪退)

    简介 在之前的项目中 很多是使用导航栏中视图层 通过KVC来获取网络状态 感觉这个方法有些投机取巧 到了iOS11 iPhoneX的导航栏视图层也进行了修改 除了蛋疼的UI 在获取使用以前获取网络状态的方法时候 果然炸了 解决方案 可以使用