19

私は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];
}

私の質問は多様です。指がしびれるまでグーグルで検索しましたが、を使用して到達可能性のステータスを簡単かつ簡単にチェックする適切なコードサンプルをまだ見つけていませんAFNetworking。(奇妙なことに、インポートについては多くの議論がありますがSystemConfiguration.framework、これは簡単なことのようです)。したがって、ユーザーがデータ使用量を最小限に抑え、wifiを使用してのみダウンロードしたい場合、wifiを確認し、wifiが利用可能な場合にのみダウンロードするにはどうすればよいですか?

第二にAFNetworking、ユーザーフレンドリーなフロントエンドになりたいようです。しかし、実際にはこのフロントエンドのフロントエンドを使用することもできます。必要なものに到達するために雑草を取り除く必要のあるものがたくさんあるからです。URLにアクセスし、(到達可能性に基づいて)xmlファイルをダウンロードして、それを使って何かをする必要があります。これを簡単な作業にする何かが欠けていますか?

私がこれを理解するとき、私は実装を単純化するためにフロントエンドまたは5つを完全に構築しています(私が単なるばかではないと仮定します)。ご回答ありがとうございます。

4

3 に答える 3

45

実際、A-Liveが言ったこととは反対に、到達可能性はAFNetworkingの一部です。AFHTTPClient.h ここに実装されています。ここ.pchで説明するように、ファイルを使用するには、ファイルに正しいインポートが必要です。

これを使用するには、ここで定義されたAFHTTPClientものを使用できるように、のサブクラスが必要になる可能性があります。サブクラスを使用しない簡単な例を次に示します。setReachabilityStatusChangeBlock

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
    }
}];

この到達可能性の設定がどのように機能するかが気に入らない場合は、TonyMillionのAppleの到達可能性のフォークをお勧めします。簡単な例:

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
    }];
}
于 2013-02-23T17:04:06.310 に答える
20

AFNetworking2.0以降では、次のように可用性を確認できます。

    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusUnknown:
        case AFNetworkReachabilityStatusReachableViaWWAN:
        case AFNetworkReachabilityStatusReachableViaWiFi:
            //available
            break;
        case AFNetworkReachabilityStatusNotReachable:
            //not available
            break;
        default:
            break;
    }

    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));

}];

//start monitoring
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

現在のステータスを取得するには

[AFNetworkReachabilityManager sharedManager].reachable
于 2014-09-29T13:00:21.397 に答える
8

ただの更新で、AFNetworkingの新しいバージョンはAFHTTPClientを非推奨にしました。

代わりにAFHTTPRequestOperationManager.hを使用できます

githubページ自体から取った小さなもの:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; //url can be google.com or something you want to reach

NSOperationQueue *operationQueue = manager.operationQueue;
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)

{
    switch (status)
    {
        case AFNetworkReachabilityStatusReachableViaWWAN:
        case AFNetworkReachabilityStatusReachableViaWiFi:
        {
            NSLog(@"SO REACHABLE");
            [operationQueue setSuspended:NO]; // or do whatever you want
            break;
        }

        case AFNetworkReachabilityStatusNotReachable:
        default:
        {
            NSLog(@"SO UNREACHABLE");
            [operationQueue setSuspended:YES]; 
            //not reachable,inform user perhaps
            break;
        }
    }
}];
[manager.reachabilityManager startMonitoring];
于 2014-06-04T20:02:34.773 に答える