AFNetworkingフレームワークを使用しています。そこで、AFHTTPClientのサブクラスを作成しました。
+ (MyNetClient *)sharedClient
{
static MyNetClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:BASE_API_URL]];
});
return _sharedClient;
}
また、サーバーからJSONをダウンロードするためのいくつかのメソッドを追加しました。
したがって、私の見解では、viewWillAppearで次のようにダウンロードを開始します。
[[MyNetClient sharedClient] getArrOfDataWithName:name
block:^(NSArray *arr) {
}];
どこ:
- (void)getArrOfDataWithName:(NSString *)name block:^(NSArray *arr)block
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSMutableDictionary *params = [NSMutableDictionary
dictionaryWithObjectsAndKeys:name,@"name",nil];
[self getPath:[self urlToService:@"data/get.json"] parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"result operation%@",operation);
BOOL res = [operation isCancelled];
if (!res)
{
dispatch_async(dispatch_get_main_queue(), ^{
block(responseObject);
});
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
block(nil);
});
}];
});
}
時間がかかり、ユーザーが押し戻すことができるので、viewDidDisappearでのダウンロードをキャンセルします。
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[[LRLoopNetClient sharedClient] operationQueue] cancelAllOperations];
}
ただし、ダウンロード操作はキャンセルされません。次の行のgetArrOfDataWithNameにブレークポイントを追加しました。
NSLog(@"result operation%@",operation);
BOOL res = [operation isCancelled];
res = NOで、ビューを離れた後に呼び出されます。私はそれをチェックしました:
NSInteger count = [[[LRLoopNetClient sharedClient] operationQueue] operationCount];
NSLog(@"number operations: %i",count);
viewDidDisappear番号操作で:0ダウンロードをキャンセルするのを手伝ってください。