Objective c UIgestureRecognitor导致“错误”;EXC“不良访问”;错误
使用连接到视图的手势识别器会触发我的应用程序崩溃,出现EXC_BAD_ACCESS错误。以下是相关课程 •BoardViewController-在AppDelegate中显示设置为rootViewController的板(作为背景)。它实例化“TaskViewcontroller”的多个对象 •TaskViewController-一个独立框,显示在电路板上。它应该是可拖动的。因此,我将UIPangestureRecognizer附加到它的视图中Objective c UIgestureRecognitor导致“错误”;EXC“不良访问”;错误,objective-c,ios,uigesturerecognizer,Objective C,Ios,Uigesturerecognizer,使用连接到视图的手势识别器会触发我的应用程序崩溃,出现EXC_BAD_ACCESS错误。以下是相关课程 •BoardViewController-在AppDelegate中显示设置为rootViewController的板(作为背景)。它实例化“TaskViewcontroller”的多个对象 •TaskViewController-一个独立框,显示在电路板上。它应该是可拖动的。因此,我将UIPangestureRecognizer附加到它的视图中 - (void)viewDidLoad {
- (void)viewDidLoad
{
[super viewDidLoad];
UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
[[self view] addGestureRecognizer:panRecognizer];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
NSLog(@"PAN!");
}
.xib文件是一个简单的视图
我更喜欢使用手势识别器在代码中进行所有编程。知道如何修复导致应用程序崩溃的错误吗?方法
handlePan
在视图控制器上,而不是视图上。您应该将目标设置为self
:
UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
EDIT(回答问题的编辑)如前所述,您的TaskViewController
在BoardViewController
的ViewDiLoad:
退出时释放。有两种处理方法:
- 将
方法与handlePan
的代码一起折叠到父视图控制器中,或viewdiload:
- 为
创建一个实例变量,而不是将其设置为局部变量TaskViewController*taskA
- 这是我使用手势识别器的方法。我认为这种方法简单,风险低
首先,将手势识别器拖放到视图中
然后,将手势识别器图标连接到代码
最后,您将为此iAction编写如下代码:
- (IBAction)handlePan:(id)sender {
NSLog(@"PAN!");
}
您可以从GitHub下载这个项目并运行它
谢谢你的留言。我纠正了这个。但是现在我得到了一个“EXC_BAD_ACCESS”错误。有什么想法吗?ARC会在
viewdiload
方法的末尾释放你的taskA
视图控制器(因为你没有任何其他引用),因此目标无效。哦,是的,对了。最好的方法是什么?创建一个NSMutableArray来存储对正在实例化的所有任务对象的引用?我添加了一个数组来保留对TaskView的引用(本例中为taskA)。我相应地更新了代码。我仍然收到“EXC\u BAD\u ACCESS”错误。谢谢。然而,正如前面提到的,我真的更喜欢用代码来完成它。此外,我不使用故事板。:)
UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
- (IBAction)handlePan:(id)sender {
NSLog(@"PAN!");
}