gpt4 book ai didi

ios - gestureRecognizer shouldReceiveTouch 坚持在释放 View 导致崩溃

转载 作者:可可西里 更新时间:2023-11-01 17:08:16 24 4
gpt4 key购买 nike

我有一个相当简单的 UITableView,它可以在堆栈上推送一个新 View 。新 View 有一个像这样初始化的 gestureRecognizer

@synthesize swipeGestureLeft;


- (void)viewDidLoad
{
swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(toggleViewLeft)];
swipeGestureLeft.numberOfTouchesRequired = 1;
swipeGestureLeft.delegate=self;
swipeGestureLeft.direction = (UISwipeGestureRecognizerDirectionLeft);
[self.view addGestureRecognizer:swipeGestureLeft];
}

我也调用委托(delegate)方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

if (viewShown==1) {
return NO;
}
return YES;
}

在我的 dealloc 方法中

- (void)dealloc {
NSLog(@"I AM IN DEALLOC");


swipeGestureLeft.delegate=nil;
[self.view removeGestureRecognizer:swipeGestureLeft];
swipeGestureLeft=nil;



}

在我的 .h 文件中有

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate>

现在,当我返回返回到我的 TableView 时, View 被释放(我可以看到,因为 NSLog 触发)现在当我尝试在我的 TableView 上向下滑动时,应用程序崩溃:

[MyViewController gestureRecognizer:shouldReceiveTouch:]: message sent to deallocated instance 

如何确保在 View 解除分配后不调用委托(delegate)方法。

最佳答案

已解决:我正在使用新的 iOS7navigationController.interactivePopGestureRecognizer 并将其委托(delegate)设置为“self”。

在解除分配时,我未能将其委托(delegate)设置为“nil”。正是这个对象保留了(不确定这个词是否正确)委托(delegate)调用,而不是 swipeLeftGesture 对象。在 dealloc 中将其委托(delegate)设置为 nil 就可以了。

关于ios - gestureRecognizer shouldReceiveTouch 坚持在释放 View 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18776596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com