XCode 常见错误

关于Use Automatic Reference Counting引发EXC_BAD_ACCESS Bug的问题

经过这几天objective-c的学习,感觉对iOS的开发有点儿了解了,所以想用uikit写个hello world程序,坚定一下自己的自信心。结果没想到本来以为毫无悬念,有点儿多余的代码,让我折腾了一上午。在这里贴出来,或许有来往客观给指点一二。

重现过程

我的XCode版本是4.5,项目内容很简单,就是用xib创建一个文本框和一个按钮。点击按钮后,用alert弹出文本框中的内容。

代码大致如下:

@interface HomePage : UIViewController
@property(nonatomic, retain) IBOutlet UITextField *txtTitle;
@property(nonatomic, retain) IBOutlet UIButton    *btnSubmit;

-(IBAction)txtTitleAction:(id)sender;
-(IBAction)btnSubmitAction:(id)sender;
@end

// 实现代码
@implementation HomePage
@synthesize txtTitle, btnSubmit;

-(IBAction)txtTitleAction:(id)sender
{
    self.txtTitle.text = @"";
}

-(IBAction)btnSubmitAction:(id)sender
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示"
                                                        message:self.txtTitle.text
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"确定",
                              nil];
    [alertView show];
}

界面与变量和action的关联如图所示:

运行没有错误,但是如果执行上面的action就是报EXC_BAD_ACCESS错误。如下图所示:

解决方法

如上图所示的错误让我纠结了好久,找不出问题出在哪里,调试似乎也无从下手。百度了好久,找到了这篇日志:http://my.oschina.net/ldaga/blog/59202?p=1。经过测试发现,这个博客中写的很对,都是Use Automatic Reference Counting惹的祸。

在工程设置中,将Objective-C Automatic Reference Counting、Objective-C Automatic Reference Counting ABI incompatibilities、Using __bridge casts outside of ARC 这几个选项都设置为 NO,将项目重新编译,问题解决。

总之,珍爱生命,不要使用自动释放内存……



0.unrecognized selector sent to instance:

1、向一个已释放对像发送信息
2、向一个不存在的对像发送信息,特别注意,有参数的方向法名要加":"号(@seletor(dosomething:))

1.this class is not key value coding-compliant for the key ...
1、interface build与代码中IBOutlet的连接所引起的。
2、在代码中对iboutlet的名称进行了修改,导致interface build中的连接实效。
3、如果在该viewcontroller连接的xib文件中没发现错误,那就很可能是mainWindow.xib文件中存在问题,在mainWindow.xib的tabbarcontroller的某个tab的viewcontroller设置了loadfrom"**.xib",但忘了将其class设为对应的viewcontroller类了。

2.Local declaration of 'scrollView' hides instance variable 
1、己存在一个和 'scrollView'一样的外部变量(指针)

3. 使用 main.xib时,有 报“defines presentation context is not available prior to xcode 4.2 ”的waring。
解决: 选择main.xib的 navigation controller , 然后,Development选择 Xcode 4.2


4.Property with 'retain (or strong)' attribute must be of object type...
通常是声名id,int等类型当作指针导致,不要*号即可。

5.Missing file warnings 
由于我使用了xcode自带的respositories,按照网上在终端输入指令的方法均不可行。这里我有个方法,在该项目xcode里在同一个地方新之建同一样的文件,然后在xcode里删除,即可。

6.mutating method sent to immutable object....
mutating method(可变量对应的方法)
immutable object(不可改变的变量):
明白了吧?比如将NSMutableArray的方法用在NSArray上就会报这个错误。

7.Multiple build commands for output file
target引用了名字重复的资源,找到当前的target,展开之后,找到Copy Bundle Resources栏目,然后在里面找到重复名字的资源,删除不要的那个即可

你可能感兴趣的:(Objective-C)