Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个后台Web服务调用导致ios崩溃_Ios_Asihttprequest - Fatal编程技术网

多个后台Web服务调用导致ios崩溃

多个后台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

我必须在视图中调用三个web服务。我正在使用
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];
}