这个问题来自Objective-C新手,所以请耐心等待。我试图在我的课堂上发出声音,并且使用NSBeep()而不是NSSound成功。这是一个例子。请注意,NSBeep();
和[[NSSound soundNamed:@"Frog"] play];
在“main.m”程序中正常工作,但只有NSBeep();
可用于SoundMaker类。学习如何让NSSound工作的任何帮助非常感谢。如何让NSSound在用户定义的类中播放声音?
的main.m:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import "SoundMaker.h"
int main() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"This is the main program.");
NSBeep(); // Works fine.
sleep(1);
[[NSSound soundNamed:@"Frog"] play]; // Works fine.
sleep(1);
[SoundMaker makeSound]; // Only NSBeep() works.
[pool drain];
return 0;
}
SoundMaker.h:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
@interface SoundMaker : NSObject
+(void) makeSound;
@end
SoundMaker.m:
#import "SoundMaker.h"
@implementation SoundMaker
+(void) makeSound
{
NSLog(@"This is SoundMaker.");
NSBeep(); // Works fine.
sleep(1);
[[NSSound soundNamed:@"Frog"] play]; // Doesn't work.
}
@end
好的,你准备好了吗?我足够的一个新手,我不知道如何使用断点。相反,我在SoundMaker的NSSound声明后添加了一条NSLog语句,并开始听到声音。因此,我尝试了一个“睡觉(1)”声明,我们现在可以听到“青蛙”的声音!因此,所需要的就是遵循NSSound声明并带有“睡眠(1)”声明来使其工作。 – scolfax 2011-04-07 22:34:52
谢谢你的意见。如上所述,您的建议引发的测试导致找到解决方案。顺便说一句,如果我理解的东西正确,因为“makeSound”消息引用类方法而不是实例方法(“+(void)”),我不认为有必要分配/ init。 – scolfax 2011-04-07 22:47:48
啊,好的,所以+就像一个(C#)静态方法?很高兴知道 :) – NKCSS 2011-04-08 06:46:21