Я полагаю, что использование sleep () блокирует воспроизведение NSSound. Это очень небрежный способ сделать это, вместо этого используйте таймер, например:
static NSInteger iter;
- (void) beginMetronome {
iter = 0;
NSTimer *timer = [NSTimer timerWithTimeInterval:self.duration target:self selector:@selector(continueMetronome:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
[timer fire];
}
- (void) continueMetronome:(NSTimer *)theTimer {
[self PlaySound];
if (++iter > 12) {
[theTimer invalidate];
}
}
Кроме того, вы должны сохранить звуки, которые вы планируете использовать в методе инициализации.
tickPlayer = [[NSSound soundNamed:@"Hat1"] retain];
tockPlayer = [[NSSound soundNamed:@"Hat2"] retain];
И методы Какао должны начинаться со строчной буквы, как я их написал. Я не слишком уверен, как метрономы должны работать, поэтому вам, возможно, придется изменить значение 12 на что-то другое.