XCode 常见错误

来源:互联网 发布:网络设计师 编辑:程序博客网 时间:2024/05/22 03:39

关于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错误。如下图所示:

报内存错误了: 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
xcode 4.2 settings  errors 解决 - fay - 孤寞渡边


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栏目,然后在里面找到重复名字的资源,删除不要的那个即可
原创粉丝点击