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ファイルをダウンロードして、それを実行することだけです。これを簡単な作業にする何かが足りないのですか?
これを理解すると、実装を簡素化するために完全に1つまたは5つのフロントエンドを構築します(私がばかではない場合を想定しています)。ご返信いただきありがとうございます。
A-Liveが実際に言ったことに反しています 到達可能性IS AFNetworkingの一部です。これはAFHTTPClient.h
で実装されています here 。議論されているように.pch
ファイルに正しいインポートが必要です here それを使用するため。
これを使用するには、おそらく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
}
}];
この到達可能性設定の動作が気に入らない場合は、Appleの到達可能性の Tony Millionのフォーク をお勧めします。簡単な例:
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
}];
}
AFNetworking
2.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
更新のみで、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];