main.m中的EXC_BAD_ACCESS代码= 1到EXC_BREAKPOINT

时间:2013-09-18 18:18:26

标签: ios debugging

我一直在网上(主要是这个网站)搜索这个问题的答案。我发现了一些相关的问题,所有这些问题都不适合我,或者没有自己回答。 我正在编写一个简单的pong程序,现在我的主加载屏幕上有一个按钮,可以将您带到游戏屏幕。 在游戏屏幕上是一个按钮,用于通过使用NSTimer开始移动球。

GameComputerVSPlayer.h

#import <UIKit/UIKit.h>


int x;
int y;

@interface GameComputerVSPlayer : UIViewController {

IBOutlet UIImageView *backcolor;
IBOutlet UIImageView *ball;
IBOutlet UIImageView *computerPaddleVert;
IBOutlet UIImageView *computerPaddle;
IBOutlet UIImageView *playerPaddleVert;
IBOutlet UIImageView *playerPaddle;
IBOutlet UIImageView *cornerTL;
IBOutlet UIImageView *cornerTR;
IBOutlet UIImageView *cornerBL;
IBOutlet UIImageView *cornerBR;

IBOutlet UIButton *startButton;


NSTimer *timer;


}

@property (nonatomic, retain) UIImageView *ball;
@property (nonatomic, retain) UIImageView *computerPaddleVert;
@property (nonatomic, retain) UIImageView *computerPaddle;
@property (nonatomic, retain) UIImageView *playerPaddleVert;
@property (nonatomic, retain) UIImageView *playerPaddle;


-(IBAction)nextPoint:(id)sender;
-(void)ballMovement;



@end

GameComputerVSPlayer.m

#import "GameComputerVSPlayer.h"
#import "ViewController.h"

@interface GameComputerVSPlayer ()

@end    

@implementation GameComputerVSPlayer

@synthesize ball, playerPaddleVert, playerPaddle, computerPaddleVert, computerPaddle;


-(void)ballMovement {
ball.center = CGPointMake(ball.center.x + x, ball.center.y + y);



}

-(IBAction)nextPoint:(id)sender{
timer = [NSTimer scheduledTimerWithTimeInterval:0.01   target:self 
selector:@selector(ballMovement)  userInfo:nil repeats:YES]; 

x = arc4random()%9;
x = x - 5;

y = arc4random()%9;
y = y - 5;

if (y==0) {
    y = 1;
}


if (x==0) {
    x = 1;
} 
}





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

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

我也试过使用NSZombie,但那没有给我看任何东西。提前感谢您的工作!

编辑:我对标题和问题不是很清楚,对不起。这是我遗漏的信息的另一部分:

最初我收到了EXC_BAD_ACCESS code = 1错误,然后我启用了NSZombie并将其更改为EXC_BREAKPOINT。

我摆弄了关于按钮的代码,导致无法解决。我使用IB断开按钮(接收动作)并运行它。我能够去看按钮,但无法点击它(毫不奇怪)。

这也是我的第一个版本,不涉及任何教程,所以如果我这样做很难过!

不确定这些额外信息是否有帮助..但是再次感谢大家^。^

编辑:编辑: 我确实启用了ARC,这是迄今为止我与教程(https://www.youtube.com/watch?v=RFB3QhfOwD4)相比的唯一区别。在此之前我尝试没有启用ARC,但在更改视图时遇到了类似的错误。因此,我将尝试打开教程项目并从中获取代码并将其移动到新项目中然后进行调整。我会让大家知道它是如何运作的。

2 个答案:

答案 0 :(得分:0)

我认为

-(void)ballMovement: (NSTimer*) timer {
    ball.center = CGPointMake(ball.center.x + x, ball.center.y + y);
}

timer = [NSTimer scheduledTimerWithTimeInterval:0.01   target:self 
selector:@selector(ballMovement:)  userInfo:nil repeats:YES];

注意:ballMovement:之后

会帮助你。

答案 1 :(得分:0)

我不确定这是不是你的问题,但这个方法是IBAction,可能连接到一个按钮。每次触摸它时,都会初始化新的NSTimer。保持NSTimer的强大属性,只有在不是nil时才创建一个:

if (!self.timer) {
   self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01 
   target:self 
   selector:@selector(ballMovement)
   userInfo:nil
   repeats:YES]; 
}