0

次のように、awakeFromNib メソッドで Finch をグローバル変数 Finch *engine に初期化する抽象クラスがあります。

engine = [[Finch alloc] init];

抽象クラスのサブクラスはメソッドをオーバーライドしません。ただし、プログラムを試すたびに、Finch は「Finch: Could not open default OpenAL device.」と出力します。デバッガーで。Finch がデフォルトの OpenAL デバイスを取得できないのはなぜですか? 私が知る限り、コード例に示されているようにすべてを行っています。

4

2 に答える 2

1

私はちょうど同じ問題に遭遇しました。私にとっては、複数のビュー コントローラーで Finch オブジェクトをインスタンス化したことが原因でした。なんらかの理由で、2 番目のものは最初のものをキャンセルしたように見え、サウンドを再生しようとするたびにそのエラー メッセージが表示されました。

それを解決するために、App Delegate に 1 つの Finch オブジェクトを作成するだけで、アプリ全体で完全に機能するようになりました。

お役に立てれば :)

于 2011-03-13T09:39:53.657 に答える
0

複数の Finch クラスを割り当てている場合の警告:

FISoundEngine では、dealloc メソッドが closeAudioDevice を呼び出します。これにより、OpenAL オーディオ デバイスが閉じます。ご存知かもしれませんが、アプリ全体に存在する OpenAL デバイスは 1 つだけです。

つまり、アプリ全体に対して 1 つのエンジン (および 1 つのファクトリ) しか持つことができないか、デバイスを開いたままにする必要がある場所でデバイスを閉じることになります。

これが設計上の欠陥かどうかはわかりません。私は Finch をシングルトン クラスにすることを提案しましたが、私の考えは著者によって拒否されました。

于 2012-02-22T11:51:17.600 に答える