我用不是当前对象的目标创建了一个 UITapGesture。后来,当点击时,应用程序崩溃。
查看控制器.h:
@interface ViewController : UIViewController
{
IBOutlet UIImageView *iv;
}
@end
查看控制器.c:
#import "ViewController.h"
#import "Target.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
Target *t = [[Target alloc] init];
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:t action:@selector(gestureDone:)];
[iv addGestureRecognizer:tgr];
[iv setUserInteractionEnabled:YES];
}
@end
目标.h:
@interface Target : NSObject
- (void)gestureDone:(UIGestureRecognizer *)gr;
@end
目标.c:
@implementation Target
- (void)gestureDone:(UIGestureRecognizer *)gr
{
NSLog(@"Gesture!");
}
@end
(我的 XIB 文件只包含一张图片......)点击图片时,它会崩溃。例如,如果我将实例变量 Target *t 添加到我的视图控制器(并删除 viewDidLoad 中的本地声明),则不会出现问题。当不这样做时,我在 Target 中覆盖了 dealloc,在其中放置了一个 NSLog,并看到 viewDidLoad 完成执行后,Target 对象就变成了 fred。
我做错了什么,还是有问题?(通常我不会遇到这个问题,因为我使用 initWithTarget:self ...)。