因此,我试图实现的目标是,当我单击按钮时,我想更改标签的文本。在网上学习了一些教程之后,尝试了无数替代内存分配/释放,我仍然无法摆脱这个错误:***-[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.hHomeView.m似乎是剩菜,并且您的笔尖对应于HomeViewController),则在单击按钮时显示该消息。

10-08 18:17