使用附加到 View 的 GestureRecognizer 会触发我的应用程序因 EXC_BAD_ACCESS 错误而崩溃。这是所涉及的类(class)

BoardViewController - 显示在 AppDelegate 中设置为 rootViewController 的板(作为背景)。它实例化了“TaskViewcontroller”的多个对象。

//BoardViewController.h
@interface BoardViewController : UIViewController {
    NSMutableArray* allTaskViews; //for storing taskViews to avoid having them autoreleased
}
//BoardViewController.m - Rootviewcontroller, instantiating TaskViews
- (void)viewDidLoad
{
    [super viewDidLoad];
    TaskViewController* taskA = [[TaskViewController alloc]init];
    [allTaskViews addObject:taskA];
    [[self view]addSubview:[taskA view]];
}

TaskViewController - 显示在板上的单个框。它应该是可拖动的。因此我将 UIPanGestureRecoginzer 附加到它的 View 中
- (void)viewDidLoad
{
    [super viewDidLoad];

    UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
    [[self view] addGestureRecognizer:panRecognizer];
}

- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
    NSLog(@"PAN!");
}

.xib 文件是一个简单的 View 。

所有使用手势识别器的编程我更喜欢用代码来完成。知道如何修复导致应用程序崩溃的错误吗?

最佳答案

handlePan 方法在您的 View Controller 上,而不是在您的 View 上。您应该将目标设置为 self :

UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];

编辑 (针对问题的编辑)正如 omz 正确指出的那样,您的 TaskViewControllerBoardViewControllerviewDidLoad: 退出时被释放。有两种处理方法:
  • handlePan 方法与 viewDidLoad:
  • 的代码一起折叠到父 View Controller 中
  • TaskViewController *taskA 创建一个实例变量,而不是让它成为一个局部变量。
  • 10-08 07:25