【发布时间】:2013-02-13 09:39:53
【问题描述】:
在我的 iOS 应用程序中,我需要使用 Reachability 来完成以下任务:
- 在渲染视图控制器时,应用程序需要检查连接状态,并相应地显示连接图标图像(在线或离线)。
- 当用户停留在视图控制器上时,如果互联网连接状态发生变化,将通知应用程序发生变化,然后相应地执行一些任务。
我在我的应用程序中使用了由 Tony Million 生成的 Reachability 类,但是发生了一件奇怪的事情: 调用startNotified方法后,可达状态变为0(NotReachable)。
以下是我的代码:
BTLandingViewController.h
#import <UIKit/UIKit.h>
#import "MBProgressHUD.h"
#import "Reachability.h"
@interface BTLandingViewController : UIViewController <UIAlertViewDelegate>
{
__weak IBOutlet UIImageView *internetIndicator;
MBProgressHUD *hud;
Reachability *reach;
UIAlertView *emptyRecordsAlert;
UIAlertView *syncReminderAlert;
}
@end
部分代码在 BTLandingViewController.m
#import "BTLandingViewController.h"
@interface BTLandingViewController ()
@end
@implementation BTLandingViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Initialize reachability
reach = [Reachability reachabilityWithHostname:BTReachTestURL];
}
return self;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Register with reachability changed notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
NetworkStatus internetStatus = [reach currentReachabilityStatus]; // value = 1 or 2
***// PS: If there is connection, before [reach startNotifier], the internetStatus's value reflects the connection status (1 or 2)***
// Start notify reachability change
[reach startNotifier];
internetStatus = [reach currentReachabilityStatus]; // Value = 0;
***// PS: Even if there is connection, after [reach startNotifier], the internetStatus's value becomes 0***
}
感谢您的帮助。
【问题讨论】:
-
你有没有关注苹果提供的可达性示例
-
已在代码中编辑您的帖子,必须先设置通知中心,然后再设置通知中心
-
您在项目中使用 ARC 吗?如果没有,我猜你必须保留 Reachability 对象。我在很多项目中都使用了 Reachability,但从来没有遇到过这样的问题。而且,是的,正如@Vinodh 建议的那样,您必须在启动通知程序之前注册通知。祝你好运!
-
谢谢大家,但问题仍然存在。我正在使用由 Tony Million 创建的 ARC 兼容版本的可达性。在通知中心注册后,我已经更改了启动通知程序。请检查我的代码。但是即使有互联网连接,调用 startNotifier 后网络状态仍然会变为 0。
标签: ios reachability