Internet 可达性在 iPhone 中无法正常工作
Internet reachability not working properly in iPhone
我正在开发一个持续跟踪互联网连接并上传一些数据的应用程序,该应用程序具有以下功能:当互联网不可用时,它会离线保存数据(照片),并在互联网可用时上传数据。我的应用程序工作正常,但有时它不检查互联网,当我关闭我的设备 wifi 并再次打开时,它正在工作,所以任何人都可以告诉我这里有什么问题让我卡住了?我的可达性代码如下:
代码
- (void)reachabilityCheck
{
/* Internet checking */
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Reachability *reach = [Reachability reachabilityForInternetConnection];
reach.reachableOnWWAN = YES;
[reach startNotifier];
NetworkStatus internetStatus = [reach currentReachabilityStatus];
if (internetStatus != NotReachable) {
//Develop By Payal
if(self.internetConnection == 0)
{
NSLog(@"Connection active");
self.internetConnection = 1;
}
//Develop By Payal Done
}
else {
NSLog(@"Connection inactive");
self.internetConnection = 0;
}
}
试试这个代码
将以下代码放入您的 viewDidLoad
方法中
它调用立即使用通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];
//Net Connection Chack
- (void)checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
UIAlertView *alrt=[[UIAlertView alloc]initWithTitle:@"Error" message:@"No Internet Connection\nPlease Check The Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alrt show];
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}
希望对你有用
您的代码存在问题,您可能无法观察到任何连接变化。
我不确定您使用了什么触发器,以便您的代码在您关闭和打开 wifi 连接时正常工作。
您可以使用 Apple here.
提供的 Reachability
class,而不是使用计时器手动检查连接
您可以导入 class,然后在您的 viewDidLoad 中注册任何连接更改(如果您需要全局观察器,则可以使用 appDelegate didFinishLaunchingWithOptions 方法)。
//AppDelegate.h
@property (strong, nonatomic) Reachability *reachability;
//AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.reachability = [Reachability reachabilityForInternetConnection];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityDidChange:) name:kReachabilityChangedNotification object:nil];
[self.reachability startNotifier];
}
#pragma mark - Reachability notification
- (void)reachabilityDidChange:(NSNotification *)notification {
Reachability *reachability = (Reachability *)[notification object];
if ([reachability isReachable]) {
NSLog(@"There is connection");
} else {
NSLog(@"Unreachable");
}
}
编辑:
您定义以下 2 个场景来测试您的代码。
- 当我终止应用程序时,它可以正常工作,重新打开应用程序,然后打开 wifi
- 当我第一次打开 wifi 然后重新打开应用程序时,它无法正常工作
在场景 1 中,您的观察者知道连接发生变化,因为应用程序仍然存在。但是,在方案 2 中,您的应用没有任何关于连接更改的信息,因为在您打开应用后没有任何变化。
如果您想在方案 2 中实现您想要的(将媒体上传到服务器),那么可达性更改不是您需要的工具。
我正在开发一个持续跟踪互联网连接并上传一些数据的应用程序,该应用程序具有以下功能:当互联网不可用时,它会离线保存数据(照片),并在互联网可用时上传数据。我的应用程序工作正常,但有时它不检查互联网,当我关闭我的设备 wifi 并再次打开时,它正在工作,所以任何人都可以告诉我这里有什么问题让我卡住了?我的可达性代码如下:
代码
- (void)reachabilityCheck
{
/* Internet checking */
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Reachability *reach = [Reachability reachabilityForInternetConnection];
reach.reachableOnWWAN = YES;
[reach startNotifier];
NetworkStatus internetStatus = [reach currentReachabilityStatus];
if (internetStatus != NotReachable) {
//Develop By Payal
if(self.internetConnection == 0)
{
NSLog(@"Connection active");
self.internetConnection = 1;
}
//Develop By Payal Done
}
else {
NSLog(@"Connection inactive");
self.internetConnection = 0;
}
}
试试这个代码
将以下代码放入您的 viewDidLoad
方法中
它调用立即使用通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];
//Net Connection Chack
- (void)checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
UIAlertView *alrt=[[UIAlertView alloc]initWithTitle:@"Error" message:@"No Internet Connection\nPlease Check The Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alrt show];
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}
希望对你有用
您的代码存在问题,您可能无法观察到任何连接变化。
我不确定您使用了什么触发器,以便您的代码在您关闭和打开 wifi 连接时正常工作。
您可以使用 Apple here.
提供的Reachability
class,而不是使用计时器手动检查连接
您可以导入 class,然后在您的 viewDidLoad 中注册任何连接更改(如果您需要全局观察器,则可以使用 appDelegate didFinishLaunchingWithOptions 方法)。
//AppDelegate.h
@property (strong, nonatomic) Reachability *reachability;
//AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.reachability = [Reachability reachabilityForInternetConnection];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityDidChange:) name:kReachabilityChangedNotification object:nil];
[self.reachability startNotifier];
}
#pragma mark - Reachability notification
- (void)reachabilityDidChange:(NSNotification *)notification {
Reachability *reachability = (Reachability *)[notification object];
if ([reachability isReachable]) {
NSLog(@"There is connection");
} else {
NSLog(@"Unreachable");
}
}
编辑:
您定义以下 2 个场景来测试您的代码。
- 当我终止应用程序时,它可以正常工作,重新打开应用程序,然后打开 wifi
- 当我第一次打开 wifi 然后重新打开应用程序时,它无法正常工作
在场景 1 中,您的观察者知道连接发生变化,因为应用程序仍然存在。但是,在方案 2 中,您的应用没有任何关于连接更改的信息,因为在您打开应用后没有任何变化。
如果您想在方案 2 中实现您想要的(将媒体上传到服务器),那么可达性更改不是您需要的工具。