我将一个实例调用到我的main.m中的一个类到我的Controls.m类,但它似乎给了我一个“无法识别的选择器发送到实例”错误。知道我在这里做错了什么吗?每次我按下按钮它都会崩溃,但是在此代码中Controls.m设置为self
?它应该没有找到测试选择器操作。
的main.m
- (void)loadView {
Controls *ct = [[Controls alloc] init];
[ct addControls];
[ct release];
}
Controls.m
- (void)addControls {
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, mv.frame.size.height-60, mv.frame.size.width, 40)];
UIBarButtonItem *barBtnDataOverlay = [[UIBarButtonItem alloc] initWithTitle:@"Test Button" style:UIBarButtonSystemItemAction target:self action:@selector(test)];
NSArray *toolbarButtons = [[NSArray alloc] initWithObjects:barBtnDataOverlay, nil];
toolbar.items = toolbarButtons;
[mv addSubview:toolbar];
[barBtnDataOverlay release];
[toolbar release];
}
- (void)test {
NSLog(@"TEST button hit");
}
答案 0 :(得分:0)
ct
将被[ct release]
解除分配,因为不会留下任何保留。尝试在您的课程中添加ct
视网膜属性以保持它。
在课堂定义中:
@property(nonatomic, retain) Controls *ct;
在您的实施中:
@synthesize ct;
...
将loadView更改为:
- (void)loadView {
self.ct = [[Controls alloc] init];
[self.ct addControls];
[self.ct release];
}
甚至更整洁:
- (void)loadView {
self.ct = [[[Controls alloc] init] autorelease];
[self.ct addControls];
}
您还应该在ct
viewDidUnload
- (void)viewDidUnLoad {
self.ct = nil;
}
顺便说一下,这是UIViewController
班吗?然后loadView
方法应该分配view
实例变量。如果您查看UIViewController
的文档,您会看到:
如果为了手动创建视图而重写此方法,则应该这样做并将层次结构的根视图分配给view属性。