2

IB からインスタンス化されたビュー コントローラーがあります。これには、デリゲートが UIButton のタイトルを次のように更新する UIPopoverController を作成するアクションを持つ UIButton が含まれています。

- (void) popoverSelected:(NSString*)string {
    [self.sortButton setTitle:string forState:UIControlStateNormal];
    [self.sortPickerPopover dismissPopoverAnimated:YES];
}

popoverSelectedUIPopoverControllerシンプルな を含むのデリゲート メソッドですUITableView

#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *selectedSort = [_sortTypes objectAtIndex:indexPath.row];

    if (_delegate != nil) {
        [_delegate popoverSelected:selectedSort];
    }
}

self.buttonポップオーバーは、スルーの TouchUpInside アクションによってインスタンス化されます。

- (IBAction)sortButtonPressed:(id)sender {
    if (_sortPicker == nil) {
        // Create the picker view controller
        _sortPicker = [[SortPickerViewController alloc] initWithStyle:UITableViewStylePlain];

        // Set this as the delegate
        _sortPicker.delegate = self;
    }

    if (_sortPickerPopover == nil) {
        // The colour picker popover is not showing. Show it
        _sortPickerPopover = [[UIPopoverController alloc] initWithContentViewController:_sortPicker];
        [_sortPickerPopover presentPopoverFromRect:_sortButton.frame
                                            inView:self.view
                          permittedArrowDirections:UIPopoverArrowDirectionAny
                                          animated:YES];
    } else {
        // if it's showing, we want to hide it
        [_sortPickerPopover dismissPopoverAnimated:YES];
        _sortPickerPopover = nil;
    }
}

ボタンのタイトルが初めて更新されたときは問題ありませんが、2 回目はEXC_BAD_ACCESSsetTitle: in を実行するとエラーが発生しpopoverSelectedます。

誤ってボタンを離している場所はどこにもありません (この時点でオブジェクトは確実にまだ存在しています)。プロジェクトはARCを使用しています。

NSZombies を使用すると、時折到達することがありますが[__NSArrayI valueRestriction] unrecognised selector sent to instance、これはさらに意味がありません。

これをさらにデバッグするために私が取ることができる明白なアプローチはありますか?

4

1 に答える 1