使用附加到 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 正确指出的那样,您的
TaskViewController
在 BoardViewController
的 viewDidLoad:
退出时被释放。有两种处理方法:handlePan
方法与 viewDidLoad:
或 TaskViewController *taskA
创建一个实例变量,而不是让它成为一个局部变量。