Ios Xcode按钮链接错误?

Ios Xcode按钮链接错误?,ios,objective-c,Ios,Objective C,嘿,我想知道他们有没有可能把两个动作链接到Xcode中的同一个按钮上?我已经试过了,但一直出现这样的错误:“以NSException类型的未捕获异常终止”。所以我猜我不能这么做?看看我想做的是什么 让一个按钮播放声音,但同样的按钮也链接到游戏中开始新一轮。我该怎么做呢?我现在在我的.m文件中有这个 #import "BullsEyeViewController.h" @interface BullsEyeViewController () @end @implementation Bull

嘿,我想知道他们有没有可能把两个动作链接到Xcode中的同一个按钮上?我已经试过了,但一直出现这样的错误:“以NSException类型的未捕获异常终止”。所以我猜我不能这么做?看看我想做的是什么 让一个按钮播放声音,但同样的按钮也链接到游戏中开始新一轮。我该怎么做呢?我现在在我的.m文件中有这个

#import "BullsEyeViewController.h"

@interface BullsEyeViewController ()

@end

@implementation BullsEyeViewController



{
int _currentValue;
int _targetValue;
int _score;
int _round;
}


- (IBAction)playSound:(id)sender {
SystemSoundID soundID;
NSString *buttonName=[sender currentTitle];
NSString *soundFile=[[NSBundle mainBundle]
                     pathForResource:buttonName ofType:@"mp3"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)
                                 [NSURL fileURLWithPath:soundFile], &
                                  soundID);
AudioServicesPlaySystemSound(soundID);


}

- (void)viewDidLoad
{
[super viewDidLoad];
[self startNewGame];
[self updateLabels];



UIImage *thumbImageNormal = [UIImage
                             imageNamed:@"SliderThumb-Normal"];
[self.slider setThumbImage:thumbImageNormal
                  forState:UIControlStateNormal];
UIImage *thumbImageHighlighted = [UIImage
                                  imageNamed:@"SliderThumb-Highlighted"];
[self.slider setThumbImage:thumbImageHighlighted
                  forState:UIControlStateHighlighted];
UIImage *trackLeftImage =
[[UIImage imageNamed:@"SliderTrackLeft"]
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 14, 0, 14)];

[self.slider setMinimumTrackImage:trackLeftImage
                         forState:UIControlStateNormal];

UIImage *trackRightImage =
[[UIImage imageNamed:@"SliderTrackRight"]
 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 14, 0, 14)];

[self.slider setMaximumTrackImage:trackRightImage
                         forState:UIControlStateNormal];

 // Do any additional setup after loading the view, typically from a nib.
 }

- (void)startNewRound
{
_round += 1;
_targetValue = 1 + arc4random_uniform(100);
_currentValue = 50;
self.slider.value = _currentValue;
}

- (void)startNewGame
{
_score = 0;
_round = 0;
[self startNewRound];



}

- (void)updateLabels
{
self.targetLabel.text = [NSString stringWithFormat:@"%d",
                         _targetValue];
self.scoreLabel.text = [NSString stringWithFormat:@"%d",
                        _score];
self.roundLabel.text = [NSString stringWithFormat:@"%d",
                        _round];

}

- (BOOL)prefersStatusBarHidden
{
return YES;
}

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

- (IBAction)showAlert
{
int difference = abs(_targetValue - _currentValue);
int points = 100 - difference;

NSString *title;
if (difference == 0) {
    title = @"Perfect!";
    points += 100;
             } else if (difference < 5) {
                 title = @"You almost had it!";
                 if (difference == 1) {
                     points += 50;
                 }
             } else if (difference < 10 ) {
                 title = @"Pretty good!";
             } else {
                 title = @"Not even close...";
             }

            _score+=points;

NSString *message = [NSString stringWithFormat:@"You scored %d points", points];

UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle: title
message:message
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles: nil];

[alertView show];

}


-(IBAction)sliderMoved:(UISlider *)slider
{
_currentValue = lroundf(slider.value);

}

- (void)alertView:(UIAlertView *)alertView
didDismissWithButtonIndex:(NSInteger)buttonIndex

{
[self startNewRound];
[self updateLabels];
}


-(IBAction)startOver
{
CATransition *transition = [CATransition animation];
transition.type = kCATransitionFade;
transition.duration = 1;
transition.timingFunction = [CAMediaTimingFunction
                             functionWithName:kCAMediaTimingFunctionEaseOut];


[self startNewGame];
[self updateLabels];

[self.view.layer addAnimation:transition forKey:nil];
}





@end
#导入“BullsEyeViewController.h”
@接口BullsEyeViewController()
@结束
@实现BullsEyeViewController
{
int _currentValue;
int_目标值;
综合得分;
国际回合;
}
-(iAction)播放声音:(id)发送方{
系统声音ID;
NSString*按钮名称=[sender currentTitle];
NSString*声音文件=[[NSBundle mainBundle]
pathForResource:类型的按钮名:@“mp3”];
AudioServicesCreateSystemSoundID((uu桥CFURLRef)
[NSURL fileURLWithPath:soundFile]&
声音);
AudioServicesPlaySystemSound(soundID);
}
-(无效)viewDidLoad
{
[超级视图下载];
[自启动名称];
[自我更新标签];
UIImage*thumbImageNormal=[UIImage
ImageName:@“SliderThumb Normal”];
[self.slider setThumbImage:thumbImageNormal
forState:uicontrol状态正常];
UIImage*thumbImageHighlighted=[UIImage
ImageName:@“SliderThumb高亮显示”];
[self.slider setThumbImage:thumbImageHighlighted
forState:uicontrol状态突出显示];
UIImage*trackLeftImage=
[[UIImage ImageName:@“SliderTrackLeft”]
带capinsets的可调整大小的图像:UIEdgeInsetsMake(0,14,0,14)];
[self.slider setMinimumTrackImage:trackLeftImage
forState:uicontrol状态正常];
UIImage*trackRightImage=
[[UIImage ImageName:@“SliderTrackRight”]
带capinsets的可调整大小的图像:UIEdgeInsetsMake(0,14,0,14)];
[self.slider setMaximumTrackImage:trackRightImage
forState:uicontrol状态正常];
//加载视图后,通常从nib执行任何其他设置。
}
-(无效)重新开始
{
_轮数+=1;
_targetValue=1+arc4random_均匀(100);
_电流值=50;
self.slider.value=\u currentValue;
}
-(无效)StartNewName
{
_得分=0;
_四舍五入=0;
[自启动重新启动];
}
-(无效)更新标签
{
self.targetLabel.text=[NSString stringWithFormat:@“%d”,
_目标价值];
self.scoreLabel.text=[NSString stringWithFormat:@“%d”,
_分数];
self.roundLabel.text=[NSString stringWithFormat:@“%d”,
_圆形];
}
-(BOOL)更喜欢StatusBarHidden
{
返回YES;
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(IBAction)showAlert
{
int差=绝对值(_targetValue-_currentValue);
积分=100-差值;
NSString*标题;
如果(差==0){
标题=@“完美!”;
点数+=100;
}否则如果(差异<5){
title=@“你差点就成功了!”;
如果(差=1){
积分+=50分;
}
}否则如果(差值<10){
title=@“非常好!”;
}否则{
title=@“甚至没有结束…”;
}
_分数+=分;
NSString*消息=[NSString stringWithFormat:@“您得了%d分”,分];
UIAlertView*alertView=[[UIAlertView alloc]
initWithTitle:title
信息:信息
代表:赛尔夫
取消按钮:@“确定”
其他按钮:无];
[警报视图显示];
}
-(iAction)滑块移动:(UISlider*)滑块
{
_currentValue=lroundf(滑块值);
}
-(void)alertView:(UIAlertView*)alertView
DidDismissionWithButtonIndex:(NSInteger)buttonIndex
{
[自启动重新启动];
[自我更新标签];
}
-(i动作)开始
{
CATTransition*转换=[CATTransition动画];
transition.type=kCATransitionFade;
过渡时间=1;
transition.timingFunction=[CAMediaTimingFunction
名称为的函数:kCamediatimingFunctionsEASEOUT];
[自启动名称];
[自我更新标签];
[self.view.layer addAnimation:transition-forKey:nil];
}
@结束
这是我的.h文件

 //
 //  BullsEyeViewController.h
 //  BullsEye
 //
 //  Created by Sebastian Shelley on 28/04/2014.
 //  Copyright (c) 2014 Sebastian Shelley. All rights reserved.
 //

 #import <UIKit/UIKit.h>
 #import <AudioToolbox/AudioToolbox.h>

 @interface BullsEyeViewController : UIViewController
 <UIAlertViewDelegate>


 @property (nonatomic, weak) IBOutlet UISlider *slider;

 @property (nonatomic, weak) IBOutlet UILabel *targetLabel;

 @property (nonatomic, weak) IBOutlet UILabel *scoreLabel;

 @property (nonatomic, weak) IBOutlet UILabel *roundLabel;

 -(IBAction)showAlert;

 -(IBAction)sliderMoved:(UISlider *)slider;

 -(IBAction)startOver;

 - (IBAction)playSound:(id)sender;
//
//BullsEyeViewController.h
//斗牛士
//
//由塞巴斯蒂安·雪莱于2014年4月28日创作。
//版权所有(c)2014塞巴斯蒂安·雪莱。版权所有。
//
#进口
#进口
@接口BullsEyeViewController:UIViewController
@属性(非原子,弱)IBUISLIDER*滑块;
@属性(非原子,弱)IBUILabel*targetLabel;
@属性(非原子,弱)IBUILabel*scoreLabel;
@属性(非原子,弱)IBUILabel*roundLabel;
-(IBAction)showAlert;
-(iAction)滑块移动:(UISlider*)滑块;
-(i)开始或结束;
-(iAction)播放声音:(id)发送方;
@结束


非常感谢您的帮助:)

在按钮中添加类似的操作

-(IBAction)myButtonPressed:(id)sender
{
 [self playSound:sender];
 [self startNewRound:Sender];
}

只需使用一个动作,只需设置一个BOOL来检查是否需要播放声音

示例代码为:

-(IBAiction)btnPressed:(id)sender
{
  if(playsound)
  {
    [self playSound];
    playsound = NO;
  }
  [self startOver];
}

然后,每当您希望再次播放桑拿时,只需将
playsound
设置为
YES
,下次用户按下按钮时,它将再次播放声音

您可以提供完整的崩溃日志吗?实际上会出现什么错误?为什么不使用一种方法执行两项任务?抱歉,请将其添加到.h文件或.m文件中文件?代码转到.m文件。声明—(iAction)MyButton已按下:(id)发件人;转到.h文件。别忘了把这个动作链接到界面构建器的按钮上,我是个新手。嗯,但是我不需要顶部的代码来播放声音吗?我用你的代码试过几次,但我似乎不明白。。。