在beginFirstResponder调用上的EXC_BAD_ACCESS

时间:2013-03-11 13:57:10

标签: iphone ios objective-c xcode ipad

我创建了一个带有一些箭头键的键盘,允许用户使用箭头按钮在tableview中的所有文本字段之间导航。 (每个细胞2个)

在某些情况下,单元格将被禁用,因此我有一个递归调用来跳过它们。即。如果用户按下右箭头,并且textField被禁用,则递归再次调用右箭头以跳过它。

我还为自己需要完成的任何滚动设置动画。但是,最近发生了一些事情,当用户导航到新的textField并且滚动动画完成后,尝试设置firstResponder时会导致EXEC_BAD_ACCESS。

我可以从第一个单元格开始重复此问题并向下导航2次。这是代码,按照我可以显示的最佳状态进行排序,编辑很多(就像其他3个箭头按钮的所有代码一样,所以你只看到所谓的行)

//receive the arrow button pressed first

_arrowButton = arrowButton;
@try
{
    switch (_arrowButton.tag)
    {

        case NumericKeyboardViewDownArrow:
            destinationIndexPath =  [NSIndexPath  indexPathForRow:currentIndexPath.row + 1 inSection:currentIndexPath.section];
            newTag = currentTextField.tag;
            break;

        default:
            break;
    }

        // check bounds of the intended index path and return if out of bounds
    if ((destinationIndexPath.row == -1) || (destinationIndexPath.row >= [_tableView numberOfRowsInSection:[destinationIndexPath section]])) {
        destinationIndexPath = currentIndexPath;
        return;
    }

    /* 
     Animation for scrolling
    */

    CGPoint current = [_tableView contentOffset];

    // if we must animate up
    if (destinationIndexPath.row < currentIndexPath.row)
    {
            // up code here
    }

    // if we must animate down
    else if (destinationIndexPath.row > currentIndexPath.row)
    {
        // always scroll animate for down
        [_tableView setContentOffset:CGPointMake(0, current.y + _tableView.rowHeight) animated:YES];
    }

    // if we only move left or right
    else
    {
            // left and right code here
    }

    //update our current location
    currentIndexPath = destinationIndexPath;
@catch (NSException *e)
{
    return;
}

然后在动画完成后完成动画制作方法

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
 {
//after the animation is done, set the responder
nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:currentIndexPath] viewWithTag:newTag];
NSLog(@"nexttextfield%@",nextTextFieldSelection);
 if (nextTextFieldSelection)
 {
    //CRASH OCCURS HERE [nextTextFieldSelection becomeFirstResponder];
 }

[self checkTextFieldIsDisabled];
}

在该方法结束时,我在一个新的文本字段中,我们检查是否已禁用。在重现这次崩溃时,它只是退出,因为我移动的textFields没有被禁用。

我已经尝试在调用新的becomeFirstResponder之前重新启动第一个响应者,但这似乎没有任何效果。我可能不会在正确的位置辞职。内存问题会出现什么想法?

由于

0 个答案:

没有答案