因此,我试图实现的目标是,当我单击按钮时,我想更改标签的文本。在网上学习了一些教程之后,尝试了无数替代内存分配/释放,我仍然无法摆脱这个错误:***-[HomeViewController performSelector:withObject:withObject:]:消息发送到已释放实例0x4b4aa10
这是我的代码:
在我的应用程序委托中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:[NSBundle mainBundle]];
self.window.rootViewController = self.homeViewController;
//[window addSubview:self.homeViewController.homeView];
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc {
[homeViewController release];
[window release];
[super dealloc];
}
然后在我的HomeViewController.m中:
@synthesize btnNewProject;
@synthesize btnOpenProject;
@synthesize label;
- (IBAction)newProject:(id)sender {
NSString *text = @"We did it!";
label.text = text;
//[text release];
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
//self.homeView = nil;
}
- (void)dealloc {
[label release];
[btnOpenProject release];
[btnNewProject release];
//[homeView release];
[super dealloc];
}
因此,该事件触发并调用了newProject,但我无法克服这次崩溃。我尝试过自动释放控制器,以及其他一些事情。有明显的错误吗?
谢谢!
更新:
所以我在用IB。我认为,我已经正确地设置了从HomeViewController(我在“自定义类”下设置的类”)到按钮和标签的连接,以及按钮的操作。
一个重要的细节是,我在视图控制器的顶部有一个视图(它已连接到文件的所有者),按钮和标签在IB中位于视图的顶部,但是所有连接都是通过HomeViewController进行的-不确定如果那应该重要。我实际上没有在代码中的任何地方设置视图(即在设置控制器的App委托中),但是它是HomeViewController中的一个变量,像其他变量(按钮和标签)一样声明(没有alloc):
@interface HomeViewController : UIViewController {
HomeView *homeView;
UIButton *btnNewProject;
UIButton *btnOpenProject;
UILabel *label;
}
@property (nonatomic, retain) HomeView *homeView;
@property (nonatomic, retain) IBOutlet UIButton *btnNewProject;
@property (nonatomic, retain) IBOutlet UIButton *btnOpenProject;
@property (nonatomic, retain) IBOutlet UILabel *label;
- (IBAction)openProject:(id)sender;
- (IBAction)newProject:(id)sender;
@end
这是我的联系的屏幕截图:
嗯...还要多分配一些...
我在这里上传了项目:
http://devmu.com/transfer/NoteMap.zip
最佳答案
好的,我已经下载并查看了您的项目。您将界面控制器中的视图控制器混为一谈。我认为这是Apple文档所缺乏的领域。最好有一本书来学习这一部分。
加载笔尖时,Interface Builder中的对象是实际对象,它们会创建,初始化并放入您的IBOutlet
中。笔尖中有一个HomeViewController
。但是,您也在应用程序委托中的代码中分配和初始化HomeViewController
。您只需要执行其中一项。
我将视图从Interface Builder中移出了视图控制器,并从笔尖中删除了视图控制器。一旦我将您的笔尖重命名为HomeViewController.xib
(因为HomeView.h
和HomeView.m
似乎是剩菜,并且您的笔尖对应于HomeViewController
),则在单击按钮时显示该消息。