我的应用程序出了问题。我有一个登录屏幕,我移动到下一个视图控制器一个按钮,然后我有3个按钮。2是隐藏的,1不是。我想要一个不是(红色的圆圈),当点击运行无效按钮的改变。然而,在这个空白中,我为我创建的int创建了一个随机数。我做了一个if声明:
如果随机编号按钮大于30,则
redcircle.hidden = YES;、Bluecircle.Hidden = NO;和yellowcircle.hidden = YES;。
问题是我希望这个按钮在一定的时间内是可见的。所以我把这个放进了空档按钮开关里。
[NSTimer scheduledTimerWithTimeInterval:ButtonTime target:self selector:@selector(setButtonEnabled) userInfo:nil repeats:NO];每当我运行这段代码时,它都会给出错误:
线程1 EXC_BAD_ACCESS code=2
ButtonTime是一个随机数,要么是1,3,要么是4.0秒。setbuttonEnabled基本上是一个空洞的说法,set bluecircle.hidden = YES;
底线:我的bug Thread 1 EXC_BAD_ACCESS code=2位于特定行:
[NSTimer scheduledTimerWithTimeInterval:ButtonTime target:self selector:@selector(setButtonEnabled) userInfo:nil repeats:NO];`编辑:我将arc4random更改为arc4random_uniform,但仍然会遇到相同的错误
.m文件:
#import "ViewController.h"
#import "ViewController.m"
@interface ViewController ()
@end
int RandomNumber;
double ButtonTime;
int RandomNumberButton;
int score;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
if ([[UIScreen mainScreen] scale] == 2.0) {
if([UIScreen mainScreen].bounds.size.height == 667){
// iPhone retina-4.7 inch(iPhone 6)
}
else if([UIScreen mainScreen].bounds.size.height == 568){
// iPhone retina-4 inch(iPhone 5 or 5s)
}
else{
// iPhone retina-3.5 inch(iPhone 4s)
}
}
else if ([[UIScreen mainScreen] scale] == 3.0)
{
//if you want to detect the iPhone 6+ only
if([UIScreen mainScreen].bounds.size.height == 736.0){
//iPhone retina-5.5 inch screen(iPhone 6 plus)
}
//iPhone retina-5.5 inch screen(iPhone 6 plus)
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
@implementation Game{
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)viewDidAppear:(BOOL)animated{
YellowCircle.hidden = YES;
BlueCircle.hidden = YES;
RedCircle.hidden = NO;
score = 0;
}
-(void)ButtonGenerator{
RandomNumber = arc4random() % 100;
if (RandomNumber>50) {
ButtonTime = 3.0;
}
if (RandomNumber<50) {
ButtonTime = 1.0 ;
}
if (RandomNumber>10) {
ButtonTime = 4.0 ;
}
}
-(void)setButtonEnabled{
BlueCircle.hidden = YES;
}
-(void)setYellowCircleEnabled{
YellowCircle.hidden = YES;
}
-(void)ButtonChanger{
RandomNumberButton = arc4random() % 100;
if (RandomNumberButton>30) {
BlueCircle.hidden = NO;
[NSTimer scheduledTimerWithTimeInterval:ButtonTime target:self selector:@selector(setButtonEnabled) userInfo:nil repeats:NO];
RedCircle.hidden = YES;
YellowCircle.hidden = YES;
}
if (RandomNumberButton<30) {
YellowCircle.hidden = NO;
[NSTimer scheduledTimerWithTimeInterval:ButtonTime target:self selector:@selector(setYellowCircleEnabled) userInfo:nil repeats:NO];
RedCircle.hidden = YES;
BlueCircle.hidden = YES;
}
if (YellowCircle.hidden = YES, BlueCircle.hidden = YES, RedCircle.hidden = YES) {
RandomNumber = 0;
[self ButtonChanger];
}
}
- (IBAction)RedCircleButton:(id)sender {
RandomNumber = 0;
[self ButtonChanger];
score = score + 1;
}
- (IBAction)BlueCircleButton:(id)sender {
}
- (IBAction)YellowCircleButton:(id)sender {
}
@end.h文件
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
@interface Game : UIViewController{
IBOutlet UIButton *RedCircle;
IBOutlet UIButton *BlueCircle;
IBOutlet UIButton *YellowCircle;
}
- (IBAction)RedCircleButton:(id)sender;
- (IBAction)BlueCircleButton:(id)sender;
- (IBAction)YellowCircleButton:(id)sender;
@end发布于 2015-08-18 17:24:29
代码2=无限循环。
ButtonChanger正在调用自己,因为条件总是满足的,因此会产生无限数量的计时器,直到系统放弃为止。
您应该真正遵循如何编写清晰可读的代码的指导方针。避免在类或作用域之外声明低级属性。还请记住,属性以小写和类大写开头。对象的引用/指针也是一个属性。
这在一定程度上是你的代码。
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIButton *blueCircleButton;
@property (nonatomic, strong) UIButton *redCircleButton;
@property (nonatomic, strong) UIButton *yellowCircleButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.blueCircleButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.blueCircleButton.frame = CGRectMake(50, 0, 100, 100);
self.blueCircleButton.backgroundColor = [UIColor blueColor];
self.redCircleButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.redCircleButton.frame = CGRectMake(50, 100, 100, 100);
self.redCircleButton.backgroundColor = [UIColor redColor];
[self.redCircleButton addTarget:self action:@selector(redButtonAction:) forControlEvents:UIControlEventTouchUpInside];
self.yellowCircleButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.yellowCircleButton.frame = CGRectMake(50, 200, 100, 100);
self.yellowCircleButton.backgroundColor = [UIColor yellowColor];
for (UIView *view in @[self.blueCircleButton, self.redCircleButton, self.yellowCircleButton]) {
[self.view addSubview:view];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)viewDidAppear:(BOOL)animated{
self.yellowCircleButton.hidden = YES;
self.blueCircleButton.hidden = YES;
self.redCircleButton.hidden = NO;
}
-(void)enableBlueCircle:(NSTimer*)timer {
self.blueCircleButton.hidden = YES;
}
-(void)enableYellowCircle:(NSTimer*)timer {
self.yellowCircleButton.hidden = YES;
}
-(void)buttonChanger{
NSInteger randomNumberButton = arc4random() % 100;
if (randomNumberButton>30) {
self.blueCircleButton.hidden = NO;
[NSTimer scheduledTimerWithTimeInterval:[self generateButtonTime] target:self selector:@selector(enableBlueCircle:) userInfo:nil repeats:NO];
self.redCircleButton.hidden = YES;
self.yellowCircleButton.hidden = YES;
}
if (randomNumberButton<30) {
self.yellowCircleButton.hidden = NO;
[NSTimer scheduledTimerWithTimeInterval:[self generateButtonTime] target:self selector:@selector(enableYellowCircle:) userInfo:nil repeats:NO];
self.redCircleButton.hidden = YES;
self.blueCircleButton.hidden = YES;
}
// if (self.yellowCircleButton.hidden = YES, self.blueCircleButton.hidden = YES, self.redCircleButton.hidden = YES) {
// [self buttonChanger];
// }
}
- (void)redButtonAction:(UIButton *)button {
[self buttonChanger];
}
-(double)generateButtonTime {
NSInteger randomNumber = arc4random() % 100;
double buttomTime = 0;
if (randomNumber>50) {
buttomTime = 3.0;
}
if (randomNumber<50) {
buttomTime = 1.0 ;
}
if (randomNumber>10) {
buttomTime = 4.0 ;
}
return buttomTime;
}
@endhttps://stackoverflow.com/questions/32078003
复制相似问题