1

私は MBProgressHUD と NSURLconnection にひどく苦労しています...

showWhileExecuting メソッドを使用して、内部に NSURLConnection コードを持つ別のプライベート メソッドを呼び出しています。

-(void)HUD
{
    MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
    HUD.delegate = self;
    HUD.labelText = @"Initializing";

    [HUD showWhileExecuting:@selector(authenticateWithPhoneNumber) onTarget:self withObject:nil animated:YES];
}

これは、showWhileExecuting メソッドを介して呼び出しているメソッドです。

-(void)authenticateWithPhoneNumber
{
    // Do some stuff
    // Get JSON data using NSURLConnection HERE

    if(successful)
    {   
        //EXC_BAD_ACCESS error here
        [self performSegueWithIdentifier:@"A" sender:self];
    }
    else
    {
        //EXC_BAD_ACCESS error here
        [self performSegueWithIdentifier:@"B" sender:self];
    }
}

アプリを実行すると、EXC_BAD_ACCESS エラーと次のメッセージが表示されます。

28 0x344c0b8b 29 0x344c082b 30 0xf2d39 -[AuthenticationConfirmationViewController authenticateWithPhoneNumber] 31 0xd9013 -[MBProgressHUD launchExecution]

それらがセグエコードを実行することが問題であると仮定すると...私はそれらをHUDメソッド内に移動しました...

-(void)HUD
{
    MBProgressHUD *HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
    HUD.delegate = self;
    HUD.labelText = @"Initializing";

    [HUD showWhileExecuting:@selector(authenticateWithPhoneNumber) onTarget:self withObject:nil animated:YES];

    if(successful)
    {
        [self performSegueWithIdentifier:@"A" sender:self];
    }
    else
    {
        [self performSegueWithIdentifier:@"B" sender:self];
    }
}

次のページへの移動は問題ありません...JSONデータ処理手順が終了する前であっても、ページの1つにジャンプすることを除いて。

これらすべての問題を引き起こしている問題は何ですか?この状況で問題にアプローチする正しい方法は何ですか?

4

1 に答える 1

1

オリジナルのメソッドが進行中です.m はスレッド化で何かをしなければならず、私は完全に理解していない何かが面白くありません

#pragma mark - Threading

- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {
    methodForExecution = method;
    targetForExecution = MB_RETAIN(target);
    objectForExecution = MB_RETAIN(object); 
    // Launch execution in new thread
    self.taskInProgress = YES;
    [NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil];
    // Show HUD view
    [self show:animated];
}

使用することをお勧めします showHUDAddedTo

    -(void)authenticateWithPhoneNumber
    {
        // Do some stuff
            // Add right before your JSON executions
            MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
            hud.labelText = @"Initializing...";     
        // Get JSON data using NSURLConnection HERE

        if(successful)
        {   
            // Add at start of requestFinished AND requestFailed basically remove hud just before your segues
             [MBProgressHUD hideHUDForView:self.view animated:YES];
            //EXC_BAD_ACCESS error here
            [self performSegueWithIdentifier:@"A" sender:self];
        }
        else
        {
  // Add at start of requestFinished AND requestFailed basically remove hud just before your segues
             [MBProgressHUD hideHUDForView:self.view animated:YES];
            //EXC_BAD_ACCESS error here
            [self performSegueWithIdentifier:@"B" sender:self];
        }
    }
于 2012-12-21T19:29:47.103 に答える