self在运行时成为另一个类?

时间:2014-01-20 12:16:58

标签: ios objective-c

我有一个轻击手势识别器,当用户点击屏幕的特定区域时,它应该调用方法。

-(void)handleTapGesture:(UITapGestureRecognizer*)sender
{
    if (self.interfaceIsiPad) {
        [self.mController.view removeGestureRecognizer:sender];
        CGPoint point = [sender locationInView:self.mController.view];
        if (point.x<70 && point.y <50 ) {
            [self dismissModalViewCtrlAndNotifyDelegateOf:willExitOk withError:nil];// crash here
            return;
        }
    }
    else {
        [self.vc.view removeGestureRecognizer:sender];
    }

}

崩溃的dissmissModalVieCtrl方法是此方法下的几行代码......在同一个类中。但是,这总是会因无法识别的选择器发送到对象

而崩溃

为什么呢?我得到了NSStringUIAppearenceProxy和其他类名这个崩溃...为什么自我转换为一些随机类。

3 个答案:

答案 0 :(得分:0)

您的方法是否真的被称为dissmissModalVieCtrl没有'w')?如果是这样,那就是你无法识别的原因。修复选择器名称的拼写,确保它与您正在调用的方法匹配(实际上似乎是dismissModalViewCtrlAndNotifyDelegateOf:withError:)。

请发布您尝试呼叫的此方法的代码。

如果你NSLog(@" self = %@", self);,那么自我实际上会出现什么?

答案 1 :(得分:0)

我不断更改自我(或其他对象)的类类型的经验是,当对该对象的引用丢失时。所以说在调用方法时你的自己是无效的。

答案 2 :(得分:0)

如果您使用dismissModalViewCtrlAndNotifyDelegateOf来关闭当前的viewController,例如使用:dismissViewControllerAnimated: completion:它会自动将消息转发给呈现视图控制器。

因此,您可能需要检查presentingViewController是否存在。

或者您可以覆盖

- (void)forwardInvocation:(NSInvocation *)anInvocation;

查看转发邮件是否正确。