ios - AFNetworking 检查可用性

标签 ios ios6 afnetworking reachability

我已经实现了 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];
}

我的问题是多方面的。我用 google 搜索直到我的手指都 NumPy 了,但还没有找到一个像样的代码示例,可以使用 AFNetworking 简单轻松地检查可达性状态。 (奇怪的是,有很多关于导入 SystemConfiguration.framework 的讨论,这看起来很简单)。因此,如果我的用户希望最大限度地减少数据使用量,并且只使用 wifi 下载,我该如何检查 wifi 并仅在 wifi 可用时才下载?

其次,AFNetworking 似乎想要成为一个用户友好的前端。但我实际上可以在这个前端使用一个前端,因为那里有很多东西,人们必须通过这些东西才能找到需要的东西。我只需要访问一个 url,下载一个 xml 文件(基于可达性),然后用它做一些事情。我是否遗漏了一些使这成为一项简单任务的东西?

当我理解这一点时,我完全是在构建一个或五个前端来简化实现(假设我不只是个白痴)。预先感谢您的任何回复。

最佳答案

其实违背了什么A-Live said可达性是 AFNetworking 的一部分。它在 AFHTTPClient.h 中实现 here .如前所述,您需要在 .pch 文件中进行正确的导入 here为了使用它。

要使用它,您可能需要一个 AFHTTPClient 的子类,这样您就可以使用 setReachabilityStatusChangeBlock 定义 here .这是一个不使用子类的简单示例。

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://google.com"]];
[client setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    if (status == AFNetworkReachabilityStatusNotReachable) {
        // Not reachable
    } else {
        // Reachable
    }

    if (status == AFNetworkReachabilityStatusReachableViaWiFi) {
        // On wifi
    }
}];

如果您不喜欢这种可达性设置的工作方式,那么我会推荐 Tony Million's fork苹果的可达性。简单示例:

Reachability *reach = [Reachability reachabilityWithHostname:@"google.com"];
if ([reach isReachable]) {
    // Reachable
    if ([reach isReachableViaWiFi]) {
        // On WiFi
    }
} else {
    // Isn't reachable

    [reach setReachableBlock:^(Reachability *reachblock)
    {
        // Now reachable
    }];

    [reach setUnreachableBlock:^(Reachability*reach)
    {
        // Now unreachable
    }];
}

关于ios - AFNetworking 检查可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041631/

相关文章:

ios - Unicode不间断空格在标签末尾被删除

ios - 如何在 UIDictationController 中调试此崩溃?

ios - 如何使用 Objective-C 填写 HTML 表单

ios - 使用 SwiftUI 从 SessionDownloadDelegate 显示进度

ios - 使用 UIWebView 和/或 UITableView 创建下拉效果

ios - cpSpaceHashEach-同一行有2个问题

objective-c - UIActivityItemSource Protocol 设置复杂对象

objective-c - MFMailComposeViewController 抛出 viewServiceDidTerminateWithError 并在使用自定义标题字体时退出

ios - AFNetworking 从响应中删除字符

ios - iPhone 应用程序编程中网络调用请求/响应的最佳实践