Ios 僵尸对象,RequireGestureRecognitizerToFail,为什么?

Ios 僵尸对象,RequireGestureRecognitizerToFail,为什么?,ios,objective-c,nszombie,Ios,Objective C,Nszombie,我有两个VC,都有一个UICollectionView,在其中一个(称为VC1)中我添加了一个 现在,通过应用程序生命周期,用户可以从该VC1切换到另一个VC2。 在这种情况下,我会崩溃,如果我加载应用程序并转到VC2,但从未点击VC1,这种情况永远不会发生。因此,在浪费了宝贵的时间弄清楚如何调试之后,我在仪器中运行了僵尸程序,并发现 [aRecognizer requireGestureRecognizerToFail:lpgr]; 是问题所在,尽管这条线在 viewdidload

我有两个VC,都有一个UICollectionView,在其中一个(称为VC1)中我添加了一个

现在,通过应用程序生命周期,用户可以从该VC1切换到另一个VC2。 在这种情况下,我会崩溃,如果我加载应用程序并转到VC2,但从未点击VC1,这种情况永远不会发生。因此,在浪费了宝贵的时间弄清楚如何调试之后,我在仪器中运行了僵尸程序,并发现

  [aRecognizer requireGestureRecognizerToFail:lpgr];
是问题所在,尽管这条线在

viewdidload 
对于VC1,如果我从VC1移动到VC2,这将被调用


我禁用了该段,我的代码运行良好,我只是不知道为什么会发生这种情况

不应创建与对象本身的依赖关系。 由于您已经将手势识别器lpgr添加到collectionview,因此在for循环中,可以在lpgr本身中创建不良的依赖关系

像这样重写它

// Make the default gesture recognizer wait until the custom one fails.
for (UIGestureRecognizer* aRecognizer in [self.collectionView gestureRecognizers]) {
    if ([aRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
        [aRecognizer requireGestureRecognizerToFail:lpgr];
}

[self.collectionView addGestureRecognizer:lpgr];
// Make the default gesture recognizer wait until the custom one fails.
for (UIGestureRecognizer* aRecognizer in [self.collectionView gestureRecognizers]) {
    if ([aRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
        [aRecognizer requireGestureRecognizerToFail:lpgr];
}

[self.collectionView addGestureRecognizer:lpgr];