我的问题有点儿难以理解,这就是为什么我发布了所有代码,所以我要求每个代码都请先测试所有代码,然后再给我答案。谢谢
在我的应用程序中,我以编程方式创建了所有UIButtons
,然后将所有这些UIButtons
保存在NSMutableArray
中。这是我的代码:
-(void)button:(id)sender
{
int btnn = 0;
int spacex = 152;
int spacey=20;
int k=0;
saveBtn = [[NSMutableArray alloc] init];
for (int i=0; i<48; i++)
{
if (btnn>6)
{
spacey=spacey+25;
spacex = 152;
btnn = 0;
}
else
{
btnn++ ;
k++;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(spacex, spacey, 25.0, 25.0);
int idx;
idx = arc4random()%[arr count];
NSString* titre1 = [arr objectAtIndex:idx];
[btn setTitle: titre1 forState: UIControlStateNormal];
[btn setTitleColor: [UIColor yellowColor] forState: UIControlStateNormal];
[btn.titleLabel setFont:[UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:22.0]];
spacex = spacex + 25;
btn.tag=k;
[btn addTarget:self action:@selector(aMethod:)forControlEvents:UIControlEventTouchUpInside];
[saveBtn addObject:btn];
[self.view addSubview:btn];
}
}
}
现在,在(aMethod :)中,在每个
UIButton
TouchUpInside
事件上添加点击声音。这是我的代码。- (void)aMethod:(id)sender
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"button-17" ofType:@"wav"];
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate=self;
[theAudio play];
}
每件事都可以在我的应用程序启动时很好地工作,但是在100次单击后连续不断地大约单击
UIButtons
,我听不到点击声,当我单击事件内部的Next UIButtons
修饰时,它崩溃了。 最佳答案
应用程序由于未捕获异常NSInternalInconsistencyException
,原因:无法在捆绑包中加载NIB:名称为secondclass的NSBundle </Users/moon/Library/Application Support/iPhone Simulator/4.1/Applications/3E14E5D6-4D1B-4DAC-A2B9-07667E99C399/soundtesting.app> (loaded)
是的。我们这里是无法理解日志消息的。您的UIButton
(我只能假定将一个新视图推送到堆栈上)正在引用一个根本不存在的NIB。这是一个命名问题,而不是按钮问题。我很可能会检查对-initWithNibName:
的任何调用,并查看您的NIB是否真的被命名为“secondclass”。请记住,iOS文件名是CaSe SeNsITive。
//.h
...
@property (nonatomic, retain) AVAudioPlayer * player;
//.m
-(void)viewDidLoad
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"button-17" ofType:@"wav"];
player=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
player.delegate=self;
//in MRC, use [path release];
}
-(void)someMethod:(id)sender
{
[player play];
}