我有一个抽象类,它在 awakeFromNib 方法中将 Finch 初始化为全局变量 Finch *engine,如下所示:
engine = [[Finch alloc] init];
抽象类的子类都不会覆盖该方法。但是,每当我尝试我的程序时,Finch 都会打印“Finch:无法打开默认 OpenAL 设备”。在调试器中。为什么 Finch 无法获取默认的 OpenAL 设备?据我所知,我正在按照他们的代码示例中所示的方式做所有事情。
我有一个抽象类,它在 awakeFromNib 方法中将 Finch 初始化为全局变量 Finch *engine,如下所示:
engine = [[Finch alloc] init];
抽象类的子类都不会覆盖该方法。但是,每当我尝试我的程序时,Finch 都会打印“Finch:无法打开默认 OpenAL 设备”。在调试器中。为什么 Finch 无法获取默认的 OpenAL 设备?据我所知,我正在按照他们的代码示例中所示的方式做所有事情。
我刚刚遇到了同样的问题。对我来说,这是由在多个视图控制器中实例化 Finch 对象引起的。由于某种原因,第二个似乎取消了第一个,并且每当我尝试播放声音时都会收到该错误消息。
为了解决这个问题,我简单地在 App Delegate 中创建了一个 Finch 对象,现在它可以在整个应用程序中完美运行。
希望这可以帮助 :)
警告,如果您分配多个 Finch 类:
在FISoundEngine 中,dealloc 方法调用closeAudioDevice。这将关闭 OpenAL 音频设备。您可能知道,您的整个应用程序中只存在一个 OpenAL 设备!
因此,这意味着您的整个应用程序只能拥有一个引擎(和一个工厂),否则您将在应该保持打开状态的地方关闭设备。
这是否是设计缺陷,我不知道。我建议把 Finch 变成一个单例类,但是我的想法被作者拒绝了。