【发布时间】:2016-06-12 03:43:32
【问题描述】:
我正在开发 iOS 应用程序,并且正在使用 AFNetworking 与服务器 API 进行交互。 我的问题是我想发送呼叫并且不想限制用户,直到从服务器获得响应,所以问题是崩溃。当用户移回该特定屏幕时,可以说我有列表屏幕,其中我正在获取数据,这需要 6-7 秒,同时用户移回上一个屏幕,当数据来自 API 并将该删除回调到列表屏幕但用户移回该屏幕然后应用程序崩溃 下面是获取数据调用的代码。
+ (void) getRequestForDocumentListing:(NSDictionary *)headerParams urlQuery: (NSString*)action parameters:(NSDictionary*)params
onComplete:(void (^)(id json, id code))successBlock
onError:(void (^)(id error, id code))errorBlock
{
NSString *authorizationValue = [self setAuthorizationValue:action];
NSString *selectedLanguage = [ApplicationBaseViewController getDataFromDefaults:@"GLOBALLOCALE"];
NSString *language = selectedLanguage;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//set headers values
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager.requestSerializer setValue:language forHTTPHeaderField:@"Accept-Language"];
[manager.requestSerializer setValue:authorizationValue forHTTPHeaderField:@"authorization"];
[manager.requestSerializer setValue:@"x-folder" forHTTPHeaderField:@"inbox"];
[manager GET:action parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"document listing success");
NSInteger statusCode = [operation.response statusCode];
NSNumber *statusObject = [NSNumber numberWithInteger:statusCode];
successBlock(responseObject, statusObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSInteger statusCode = [operation.response statusCode];
NSNumber *statusObject = [NSNumber numberWithInteger:statusCode];
id responseObject = operation.responseData;
id json = nil;
id errorMessage = nil;
if (responseObject) {
json = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error];
errorMessage = [(NSDictionary*)json objectForKey:@"Message"];
}else{
json = [error.userInfo objectForKey:NSLocalizedDescriptionKey];
errorMessage = json;
}
errorBlock(errorMessage, statusObject);
}];
}
我需要在 ViewdidDisappear 视图委托中停止调用
- (AFHTTPRequestOperation *)GET:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"GET" URLString:URLString parameters:parameters success:success failure:failure];
[self.operationQueue addOperation:operation];
return operation;
}
如何解决这个特殊问题?
【问题讨论】:
-
在数组中添加所有操作,并在 ViewdidDisappear 中循环遍历数组后停止。
-
@MOHAMMADISHAQ 你认为这是最好的方法吗,可能需要其他操作并且也很重要。
-
您的应用程序正在崩溃,因为当您返回时,您的视图控制器被释放并且后台操作接近该释放的对象。因此,您需要删除/停止该视图控制器的所有正在进行的操作。如果您想继续重要不要停止,请选择一个共享数据模型,该模型会在成功时获得响应并更新视图控制器(如果未发布)
标签: ios objective-c xcode api afnetworking