我有一个轻击手势识别器,当用户点击屏幕的特定区域时,它应该调用方法。
-(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
方法是此方法下的几行代码......在同一个类中。但是,这总是会因无法识别的选择器发送到对象
为什么呢?我得到了NSString
,UIAppearenceProxy
和其他类名这个崩溃...为什么自我转换为一些随机类。
答案 0 :(得分:0)
您的方法是否真的被称为dissmissModalVieCtrl
(没有'w')?如果是这样,那就是你无法识别的原因。修复选择器名称的拼写,确保它与您正在调用的方法匹配(实际上似乎是dismissModalViewCtrlAndNotifyDelegateOf:withError:
)。
请发布您尝试呼叫的此方法的代码。
如果你NSLog(@" self = %@", self);
,那么自我实际上会出现什么?
答案 1 :(得分:0)
我不断更改自我(或其他对象)的类类型的经验是,当对该对象的引用丢失时。所以说在调用方法时你的自己是无效的。
答案 2 :(得分:0)
如果您使用dismissModalViewCtrlAndNotifyDelegateOf
来关闭当前的viewController,例如使用:dismissViewControllerAnimated: completion:
它会自动将消息转发给呈现视图控制器。
因此,您可能需要检查presentingViewController
是否存在。
或者您可以覆盖
- (void)forwardInvocation:(NSInvocation *)anInvocation;
查看转发邮件是否正确。