0

AVQueuePlayer クラスを使用して、3 つのファイルを順番に再生する iPhone アプリを設計しています。

順番に再生する必要がある 3 つの URL は、最初に http:// プロトコルを使用して .htm ファイルから抽出する必要があります。その目的のために、私は TFHpple クラスを使用しています。ここからhpple git プロジェクト

私の問題は、AVQueuePlayer プレーヤーをメイン スレッドで実行する必要があり、.htm ファイルを解析しようとすると画面がタッチに反応しないことです。

これらの .htm ファイルに含まれている URL を解析する必要があり、その URL を AVQueuePlayer プレーヤーにフィードします。

マルチスレッドはネットワーク アプリケーションには適していないという Apple のドキュメントを読んでいましたが、.htm コンテンツを解析するには hpple を使用する必要があります。

この問題を解決するには?

4

1 に答える 1

1

メインスレッドで使用AVQueuePlayerしているが、別のスレッドからトリガーされることが唯一の問題である場合は、performSelectorOnMainThread.


NSObject リファレンスから;

- (void)performSelectorOnMainThread:(SEL)aSelector 
                         withObject:(id)arg 
                      waitUntilDone:(BOOL)wait

デフォルト モードを使用して、メイン スレッドでレシーバーのメソッドを呼び出します。

討論

このメソッドを使用して、アプリケーションのメイン スレッドにメッセージを配信できます。メイン スレッドは、アプリケーションのメイン実行ループを包含し、NSApplication オブジェクトがイベントを受け取る場所です。この場合のメッセージは、スレッドで実行する現在のオブジェクトのメソッドです。

このメソッドは、共通の実行ループ モード (NSRunLoopCommonModes 定数に関連付けられたモード) を使用して、メイン スレッドの実行ループでメッセージをキューに入れます。通常の実行ループ処理の一部として、メイン スレッドはメッセージをデキューし (一般的な実行ループ モードの 1 つで実行されていると仮定)、目的のメソッドを呼び出します。同じスレッドからこのメソッドを複数回呼び出すと、対応するセレクターがキューに入れられ、呼び出しが行われたのと同じ順序で実行されます。

このメソッドを使用してキューに入れられたメッセージをキャンセルすることはできません。現在のスレッドでメッセージをキャンセルするオプションが必要な場合は、 performSelector:withObject:afterDelay: または performSelector:withObject:afterDelay:inModes: メソッドを使用する必要があります。


さらに、xHTMLを解析するために RaptureXML を検討することをお勧めします。これは無駄がなく、高速で便利です。

于 2012-04-13T00:27:09.790 に答える