Iphone 按下按钮后,在Main.m中崩溃

Iphone 按下按钮后,在Main.m中崩溃,iphone,ios,xcode,ipad,crash,Iphone,Ios,Xcode,Ipad,Crash,我刚开始用X代码4.2构建一个应用程序。我用单视图应用程序模板创建了应用程序 我创建了一个MainIconViewController,它是一个简单的VC,包含一个图像、标签和按钮。我将MainIconViewController视图添加到我的mainViewController视图中,当按下该按钮时,Main.m中出现崩溃,显示: -[\uu NSCFType main按钮按下:]:无法识别的选择器发送到实例0xb867ba0 Main.m中发生碰撞的线路为: return UIApplica

我刚开始用X代码4.2构建一个应用程序。我用单视图应用程序模板创建了应用程序

我创建了一个MainIconViewController,它是一个简单的VC,包含一个图像、标签和按钮。我将MainIconViewController视图添加到我的mainViewController视图中,当按下该按钮时,Main.m中出现崩溃,显示:

-[\uu NSCFType main按钮按下:]:无法识别的选择器发送到实例0xb867ba0

Main.m中发生碰撞的线路为:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
现在按钮按下:是完全空的

有没有办法解决这个问题

我刚刚试着做一个全新的项目来重新测试这个。我创建了这个项目,创建了一个包含单个按钮的viewController子类。然后在主视图控制器中创建该视图的实例,并将其添加到视图中。当我按下按钮时,应用程序会像以前一样崩溃

编辑: 以下是所有代码:

//MainIconViewController.h
@protocol MainIconViewControllerDelegate <NSObject>

-(void) openFileNamed:(NSString *)name;
-(void) createNewFile;

@end

#import <UIKit/UIKit.h>

@interface MainIconViewController : UIViewController {


}
@property (assign) id <MainIconViewControllerDelegate> delegate;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
- (void)mainButtonPressed:(id)sender;


@end


//////////////////////////////
//MainIconViewController.m
#import "MainIconViewController.h"

@implementation MainIconViewController
@synthesize titleLabel;
@synthesize imageView;
@synthesize delegate;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [self setTitleLabel:nil];
    [self setImageView:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return YES;
}
- (void)mainButtonPressed:(id)sender{

}

@end
//MainIconViewController.h
@协议MainIconViewControllerDelegate
-(void)OpenFileName:(NSString*)名称;
-(void)创建新文件;
@结束
#进口
@接口MainIconViewController:UIViewController{
}
@属性(分配)id委托;
@性质(弱,非原子)IBUILabel*标题标签;
@属性(弱、非原子)IBUIImageView*imageView;
-(void)主按钮按下:(id)发送者;
@结束
//////////////////////////////
//MainIconViewController.m
#导入“MainIconViewController.h”
@实现MainIconViewController
@合成滴定标记;
@综合图像视图;
@综合代表;
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)未收到记忆警告
{
//如果视图没有superview,则释放该视图。
[超级记忆警告];
//释放所有未使用的缓存数据、图像等。
}
#pragma标记-视图生命周期
-(无效)viewDidLoad
{
[超级视图下载];
//从nib加载视图后,执行任何其他设置。
}
-(无效)视图卸载
{
[自设置标题标签:无];
[自设置图像视图:无];
[超级视频下载];
//释放主视图的所有保留子视图。
//例如,self.myOutlet=nil;
}
-(布尔)应自动旋转指针面定向:(UIInterfaceOrientation)interfaceOrientation
{
//对于支持的方向返回YES
返回YES;
}
-(无效)主按钮按下:(id)发件人{
}
@结束

如错误输出中所述,您尚未在头文件中声明方法
main按钮pressed:

确保您的签名看起来像:

- (void)mainButtonPressed:(id)sender;

在您的头文件中。

检查此视图控制器的初始化。

首先,您的方法必须声明如下:

- (IBAction)mainButtonPressed:(id)sender;
MainIconViewController *icon = [[MainIconViewController alloc]initWithNibName:@"your xib name without extension" bundle:nil];
然后,您必须按如下方式调用控制器:

- (IBAction)mainButtonPressed:(id)sender;
MainIconViewController *icon = [[MainIconViewController alloc]initWithNibName:@"your xib name without extension" bundle:nil];
(更安全,但如果您的xib文件的名称与控制器的名称类似,则可以这样做)

当然,别忘了将您的按钮和操作链接到IB

还请检查与
mainicoviewcontroller
对应的xib的
文件所有者(到IB)是否设置为mainicoviewcontroller

请注意,这里有一个内存泄漏。您可以在类中保留控制器,并在不再需要时释放它。如果过早发布,它将崩溃,因为您的视图在需要时内存中没有控制器。如果没有释放(就像这里所做的),控制器将保持在内存中,并且内存泄漏


请注意,Apple不推荐您这样做(一个视图层次=一个视图控制器)。如果使用ARC,则可能是崩溃的问题。

如何创建视图?您应该通过创建VC,然后使用view属性访问视图,或者在视图层次结构上显示视图控制器来实现

MainIconViewController *vc = [[MainIconViewController alloc]initWithNibName:@"MainIconViewController" bundle:nil];
[self.view addSubview:vc.view];
// or....
[self presentModalViewController:vc animated:NO];

否则,您在interface builder中建立的连接将不会与此类连接。

…或者该方法可能不存在。严格地说,您不需要在头文件中声明该方法,如果您错过了它,并且该方法仍在您的实现中,您将不会得到无法识别的选择器错误。更可能的是,该方法根本不存在,或者存在拼写错误。该方法存在,并且声明与您键入的完全相同。在某些情况下,编译器将发出警告,告知选择器可能不存在(例如,SomeClassName可能不响应选择器SelectorName)。为了避免警告,我更喜欢在标题中写入所有选择器。实际上,崩溃不在main()中,请发布按钮操作代码。按钮操作中根本没有任何内容我需要检查什么?这里是:MainIconViewController*图标=[[MainIconViewController alloc]initWithNibName:nil bundle:nil];[viewForIcons添加子视图:icon.view];icon.view.frame=CGRectMake(40,20,icon.view.frame.size.width,icon.view.frame.size.height);感谢您将我引向错误——由于某种原因,ARC在我的目标中关闭了语言,打开了警告。我两个都打开了,效果很好。