IB からインスタンス化されたビュー コントローラーがあります。これには、デリゲートが UIButton のタイトルを次のように更新する UIPopoverController を作成するアクションを持つ UIButton が含まれています。
- (void) popoverSelected:(NSString*)string {
[self.sortButton setTitle:string forState:UIControlStateNormal];
[self.sortPickerPopover dismissPopoverAnimated:YES];
}
popoverSelected
UIPopoverController
シンプルな を含むのデリゲート メソッドです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_ACCESS
setTitle: in を実行するとエラーが発生しpopoverSelected
ます。
誤ってボタンを離している場所はどこにもありません (この時点でオブジェクトは確実にまだ存在しています)。プロジェクトはARCを使用しています。
NSZombies を使用すると、時折到達することがありますが[__NSArrayI valueRestriction] unrecognised selector sent to instance
、これはさらに意味がありません。
これをさらにデバッグするために私が取ることができる明白なアプローチはありますか?