私のアプリケーションをビルドすると、NetEngineというクラスを作成して、すべてのネットワーク要求を管理します。しかし、NetEngineを使用するView Controllerを終了した後でも、私はまだ成功または失敗ブロックを呼び出していることがわかります。View Controllerを終了した後にコールバックブロックを呼び出さないでください
のViewController:
[[NetEngine engine] GET:httpUrl success:^(id responseObject) {
//some code here
//It's still called after I quit viewctroller
} failure:^(NSError *error) {
//some code here
//It's still called after I quit viewctroller
}];
NetEngine:
作成:
typedef void(^SuccessBlock) (id responseObject);
typedef void(^FailureBlock) (NSError *error);
@interface NetEngine()
@property (nonatomic, strong) AFHTTPSessionManager *httpManager;
@end
@implementation NetEngine
+ (NetEngine *)engine {
static NetEngine *_sharedEngengine = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedEngengine = [[self alloc] init];
});
return _sharedEngengine;
}
- (id)init {
if (self = [super init]) {
_httpManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:BZTVBaseServerPath]];
[_httpManager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"accept"];
_httpManager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
_httpManager.operationQueue.maxConcurrentOperationCount = 4;
[_httpManager.requestSerializer setTimeoutInterval:10.0];
}
return self;
}
- (void)GET:(NSString *)URLString success:(SuccessBlock)successBlock failure:(FailureBlock)failureBlock {
// some thing about cache
[_httpManager GET:encodeUrl parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
[[self defaultCache] setObject:responseObject forKey:cacheKey];
if (successBlock) {
successBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (isCache) {
if (successBlock) {
successBlock([[self defaultCache] objectForKey:cacheKey]);
}
}
if (failureBlock) {
failureBlock(error);
}
}];
}
ので。あなたは着信応答を警戒する必要があります!ビューコントローラを終了する前に有効な応答をチェックし、使用可能な場合はvcを終了し、応答を待機します。 –
@TejaNandamuriあなたは正しいですが、もう少しアドバイスをいただけますか?また、着信応答を処理する方法に関する記事もありますか?ありがとうたくさん –
私はこれについての記事がないと思う。これはすべてあなたの必要条件に依存します。あなたがしようとしていることに関する詳細情報を提供する必要があります。 –