多个后台Web服务调用导致ios崩溃
我必须在视图中调用三个web服务。我正在使用多个后台Web服务调用导致ios崩溃,ios,asihttprequest,Ios,Asihttprequest,我必须在视图中调用三个web服务。我正在使用ASIHttprequest调用。我将逐个调用每个web服务。它引起了碰撞 -[INetServices respondsToSelector:]: message sent to deallocated instance 0x12629a10 其中adminCheck如下所示: -(void)adminCheck { INetServices *inetadmin=[[INetServices alloc]init]; NSStri
ASIHttprequest
调用。我将逐个调用每个web服务。它引起了碰撞
-[INetServices respondsToSelector:]: message sent to deallocated instance 0x12629a10
其中adminCheck
如下所示:
-(void)adminCheck
{
INetServices *inetadmin=[[INetServices alloc]init];
NSString *response = [inetadmin doHTTPPostadmincheck:getUserId comm_id:str_commId];
if (!response) {
NSLog(@"response nil ");
return;
}
NSMutableArray *jsonarrayResponse=[response JSONValue];
NSLog(@"Admin:%@",jsonarrayResponse);
str_adminStatus = [jsonarrayResponse valueForKey:@"admin_status"];
if ([[jsonarrayResponse valueForKey:@"status"] isEqualToString:@"success"]==TRUE)
{
if ([[jsonarrayResponse valueForKey:@"message"]isEqualToString:@"Admin user!."]==TRUE)
{
int_adminStatus=1;
}
else
{
int_adminStatus=0;
}
}
[self performSelectorOnMainThread:@selector(hideProgress) withObject:nil waitUntilDone:NO];
[self performSelectorOnMainThread:@selector(CommunityDetailwebservice)
withObject:nil waitUntilDone:NO];
}
根据目前提供的信息,很难准确确定僵尸的来源。或堆栈跟踪可能会缩小范围 话虽如此,我发现在执行时对
show的调用中对其他方法的异步调用有点令人担忧,特别是因为hideProgress
试图隐藏当前显示的HUD
我倾向于重构这段代码,并将HUD传递给选择器,以获得一个将运行所有三个web服务的方法:
MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:hud];
[hud showWhileExecuting:@selector(performWebServiceRequests:) onTarget:self withObject:hud animated:YES];
这样,performWebServiceRequests:
更新HUD并执行各种同步web服务请求:
- (void)performNetworkRequests:(MBProgressHUD *)hud
{
hud.labelText = @"step 1";
[self adminCheck];
hud.labelText = @"step 2";
[self communityDetailWebService];
hud.labelText = @"step 3";
[self thirdWebService];
}
如果您需要后一个web服务的调用取决于前一个web服务的成功,则可以相应地调整performWebServiceRequests
。例如,如果这三个web服务方法在成功时返回TRUE
,或在失败时返回FALSE
,则可以执行以下操作:
- (void)performNetworkRequests:(MBProgressHUD *)hud
{
hud.labelText = @"step 1";
if (![self adminCheck])
return;
hud.labelText = @"step 2";
if (![self communityDetailWebService])
return;
hud.labelText = @"step 3";
[self thirdWebService];
}
无论如何,当您从performWebServiceRequests
方法返回时,HUD将自动为您解除。如果您添加了,这可能有助于确定是哪一行导致了问题。或者与我们共享堆栈跟踪。在我看来唯一值得怀疑的是,当你在show中执行
时,你正在调用hideProgress
。这种方法有什么作用?这可能是在试图删除使用HUD的视图控制器吗?是,隐藏用于隐藏HUD的进程方法。然后调用CommunityDetailwebservice..同样的过程会发生,在community detail webservice Response中,再次调用了一个webservice….-(void)requestFinished:(ASIHTTPRequest*)请求当调用第三个Web服务时,此函数会出错……这是因为hud吗showWhileExecuting@user3388273您可能希望更新您的问题,并分享该方法。
- (void)performNetworkRequests:(MBProgressHUD *)hud
{
hud.labelText = @"step 1";
if (![self adminCheck])
return;
hud.labelText = @"step 2";
if (![self communityDetailWebService])
return;
hud.labelText = @"step 3";
[self thirdWebService];
}