标签: reachability

如何在放弃Wi-Fi网络时在iOS中获取可达性通知?

我正在成功使用Reachability来确定网络的状态,并获得有关更改的通知(例如iOS 4的可达性指南).

我的问题不是如何让Reachability启动和运行,而是如下.

AppDelegate处理可达性的东西.应用kReachabilityChangedNotification程序运行时以及应用程序位于Background(applicationDidEnterBackground:)时,应用程序会收到通知().

该应用程序旨在重新加载播放的音频流,当它注意到它丢失了一个Wi-Fi连接,例如,为了测试,我在设置中打开和关闭Wi-Fi,一切都运行良好.在实际测试中,当我退出接入点的范围时,我经常会失去Wi-Fi连接.我发现在这种情况下,Reachability并没有帮助我太多.我不确定是不是因为当屏幕被锁定时,可达性通知没有通过,或者可达性无法处理来自越来越远的Wi-Fi接入点的信号缓慢减少,但无论我无法想象为什么现实世界的测试与理想化的案例不符.

这就是我的代码.我首先设置接收通知,然后开始收听Reachability:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // check for internet connection
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(checkNetworkStatus:) 
                                                 name:kReachabilityChangedNotification object:nil];

    // Set up Reachability
    internetReachable = [[Reachability reachabilityForInternetConnection] retain];
    [internetReachable startNotifier];    

    ....

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

然后,这是响应连接变化的函数:

- (void)checkNetworkStatus:(NSNotification *)notice {
    // called after network status changes

    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)
    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is …
Run Code Online (Sandbox Code Playgroud)

networking reachability ios

24
推荐指数
1
解决办法
2万
查看次数

如何检查alamofire中的互联网连接?

我使用下面的代码在服务器中发出HTTP请求.现在我想知道它是否连接到互联网.以下是我的代码

  let request = Alamofire.request(completeURL(domainName: path), method: method, parameters: parameters, encoding: encoding.value, headers: headers)
      .responseJSON {


        let resstr = NSString(data: $0.data!, encoding: String.Encoding.utf8.rawValue)
        print("error is \(resstr)")


        if $0.result.isFailure {
          self.failure("Network")
          print("API FAILED 4")
          return
        }
        guard let result = $0.result.value else {
          self.unKnownError()
          self.failure("")
          print("API FAILED 3")

          return
        }
        self.handleSuccess(JSON(result))
    }
Run Code Online (Sandbox Code Playgroud)

reachability ios swift alamofire

23
推荐指数
4
解决办法
3万
查看次数

如何在Alamofire中使用NetworkReachabilityManager

我希望AFNetworking在Objective-C中使用与Swift中的Alamofire NetworkReachabilityManager 类似的功能:

//Reachability detection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusReachableViaWWAN: {
            [self LoadNoInternetView:NO];
            break;
        }
        case AFNetworkReachabilityStatusReachableViaWiFi: {
            [self LoadNoInternetView:NO];
            break;
        }
        case AFNetworkReachabilityStatusNotReachable: {
            break;
        }
        default: {
            break;
        }
    }
}];
Run Code Online (Sandbox Code Playgroud)

我目前正在使用监听器来了解网络状态的变化

let net = NetworkReachabilityManager()
net?.startListening()
Run Code Online (Sandbox Code Playgroud)

有人可以描述如何支持这些用例吗?

reachability ios network-connection swift alamofire

22
推荐指数
6
解决办法
3万
查看次数

检测后台的可达性

我一直在测试不同的方法,以实现在应用程序处于后台时设备是否能够恢复互联网的可能性,因此我测试的第一个代码是Apple可访问性示例代码http://developer.apple.com/library/ios /#samplecode/Reachability/Introduction/Intro.html

但是,当应用程序处于后台时,此代码不会通知Internet状态.所以我也尝试了下面的代码,当App从Background状态启动到前台时它起作用(与Apple可访问性示例代码相同)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {


// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(checkNetworkStatus:)
                                             name:kReachabilityChangedNotification object:nil];

// Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];

 ...
 }


 - (void)applicationDidEnterBackground:(UIApplication *)application {

// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(checkNetworkStatus:)
                                             name:kReachabilityChangedNotification object:nil];

// Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];

}



- (void)checkNetworkStatus:(NSNotification *)notice {
// called after network status changes

NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
    case …
Run Code Online (Sandbox Code Playgroud)

multithreading background reachability ios swift

20
推荐指数
2
解决办法
5716
查看次数

初始化期间无法成功更新网络信息

当我第一次在当天启动应用程序时,我总是得到上述问题.当我第一次启动应用程序时,我进行服务器调用以获取一些数据,然后播放动画视频.服务器调用与主UI线程位于不同的线程中.它与Network Reachability或动画视频有关吗?我认为第一部分是主要问题,但无法一直重现.

有没有人遇到过这个问题?

下面是我第一次启动应用程序时的代码.

override func viewDidLoad() {
        super.viewDidLoad();


        self.navigationController?.navigationBarHidden = true;
        self.view.backgroundColor = UIColor.whiteColor();
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { () -> Void in
            Items.setup(); //AFNetworking call
        };

        animationViewController.delegate = self;
        animationViewController.view.autoresizesSubviews = true;
        animationViewController.view.autoresizingMask = [.FlexibleLeftMargin, .FlexibleRightMargin];
        animationViewController.view.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);

        self.view.addSubview(animationViewController.view);    

    }
Run Code Online (Sandbox Code Playgroud)

iphone reachability ios swift

20
推荐指数
1
解决办法
2万
查看次数

AFNetworking检查可用性

我已经实现了AFNetworking没有子类化AFHTTPClient,部分使用我的以下代码DownloadQueueManager:

-(void)downloadPodcastAt:(NSString *)url toPath:(NSString *)path
{
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                             cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                         timeoutInterval:60.0];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
    {
        [self saveQueuedItemInformation];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error)
    {
        // Other stuff
    }];

    [operation start];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是多方面的.我用google搜索"我的手指麻木了,还没有找到一个像样的代码样本,它可以简单轻松地检查可达性状态AFNetworking.(奇怪的是,有很多关于进口的讨论SystemConfiguration.framework,这看起来很简单).因此,如果我的用户想要最小化他们的数据使用,并且只使用wifi下载,我该如何检查wifi,并且只有在wifi可用时才下载?

其次,它似乎AFNetworking想成为一个用户友好的前端.但我实际上可以在这个前端使用前端,因为那里有很多东西,人们不得不通过它来获得所需的东西.我只需要访问一个url,下载一个xml文件(基于可达性),并用它做一些事情.我错过了一些让这项任务变得简单的事情吗?

当我理解这一点时,我完全建立了一个前端或五个来简化实现(假设我不仅仅是一个白痴).提前感谢您的回复.

reachability ios afnetworking ios6

19
推荐指数
3
解决办法
3万
查看次数

git reflog expire和git fsck --unreachable

免责声明:这个问题纯粹是信息性的,并不代表我遇到的实际问题.我只是想弄清楚它的东西(因为我喜欢弄清楚东西,我知道你也这样做).

所以我正在玩git,试图使修改后的提交失效.我的reflog看起来像这样:

4eea1cd HEAD@{0}: commit (amend): amend commit
ff576c1 HEAD@{1}: commit: test: bar
5a1e68a HEAD@{2}: commit: test: foo
da8534a HEAD@{3}: commit (initial): initial commit
Run Code Online (Sandbox Code Playgroud)

这意味着我做了两次提交(da8534a5a1e68a),然后是ff576c1我修改过的第三次提交4eea1cd.

正如预期的那样,我git log看起来像这样:

* 4eea1cd (HEAD, master) amend commit
* 5a1e68a test: foo
* da8534a initial commit
Run Code Online (Sandbox Code Playgroud)

从我(虽然我)知道提交的可达性,有一天(最有可能,默认情况下在30天内)git gc应该收集ff576c1.现在我不想等待30天才能看到这种情况,所以我开始运行一些命令,首先:

git fsck --unreachable --no-reflogs
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这让我:

unreachable blob 5716ca5987cbf97d6bb54920bea6adde242d87e6
unreachable tree 1e60e555e3500075d00085e4c1720030e077b6c8
unreachable commit ff576c1b4b6df57ba1c20afabd718c93dacf2fc6
Run Code Online (Sandbox Code Playgroud)

所有人都相信我将要过期这种可怜的孤独ff576c1承诺,然后我会跑git reflog expire:

git reflog …
Run Code Online (Sandbox Code Playgroud)

git reachability reflog

18
推荐指数
1
解决办法
4597
查看次数

可达性和IPv6

我的一个项目使用Apple的Reachability类来监控网络状态,并在发生变化时得到通知.

在阅读了关于支持IPv6的这篇文章后,我想知道是否要在这个类中使用它以使其与IPv6一起工作.

在同一篇文章后面建立了一个IPv6网络,一切似乎都运行良好,但可能是设置有问题.

Reachability类的一部分是检查Internet连接是否与IPv6一起使用,还是需要进行一些更改?

objective-c ipv6 reachability ios

18
推荐指数
1
解决办法
7392
查看次数

使用AFNetworking 2.0设置可访问性

我正在尝试使用新的2.0 AFNetworking设置Reachability .

在我的AppDelegate中,我初始化了sharedManager.

// Instantiate Shared Manager
[AFNetworkReachabilityManager sharedManager];
Run Code Online (Sandbox Code Playgroud)

然后在相关的VC方法中我检查是否isReachable:

// Double check with logging
if ([[AFNetworkReachabilityManager sharedManager] isReachable]) {
    NSLog(@"IS REACHABILE");
} else {
    NSLog(@"NOT REACHABLE");
}
Run Code Online (Sandbox Code Playgroud)

目前这在模拟器中没有按预期工作,但我想这需要在设备而不是模拟器上进行测试.

问题 我想要做的是监控VC内的连接.所以我在viewDidLoad中运行以下命令:

// Start monitoring the internet connection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
Run Code Online (Sandbox Code Playgroud)

我如何注册更改?一旦网络连接发生变化,将会调用什么/我将无法从文档中看到这一点.

reachability ios afnetworking ios6 afnetworking-2

17
推荐指数
1
解决办法
3万
查看次数

可达性无法按预期工作

从Apple下载Reachability,使用此方法检查活动连接:

-(BOOL)isReachable{

    Reachability *r = [Reachability reachabilityWithHostName:@"http://www.google.com"];

    if(NotReachable == [r currentReachabilityStatus]) {
        NSLog(@"Not Reachable");
        return NO;
    }

    NSLog(@"Reachable");
    return YES;  

}
Run Code Online (Sandbox Code Playgroud)

尽管连接了,但每次都返回NO?无法弄清楚为什么......

有任何想法吗?谢谢.

在旁注,任何人都可以推荐一个很好的清洁Reachability单件类?

objective-c reachability ios

16
推荐指数
2
解决办法
8955
查看次数