2012-06-01 72 views
0

我是使用Objective-C和Cocoa的新手。如何加載多個QTMovie對象,然後選擇要播放的對象?

我已經按照here上的Quicktime播放電影的示例代碼。我想知道如何擴展它,以便我可以在程序開始時加載多個QTMovie,然後在請求時以最小的延遲播放它們中的每一個。

我最初的策略是創建一個包含QTMovie對象和加載和播放它的方法的類。然後在我的主要課程中,我會列出這些MovieContainer對象。

當我嘗試實現這一點,我每QTMovie與錯誤信息

Domain=NSOSStatusErrorDomain Code=-2098 "The operation couldn’t be completed. 
(OSStatus error -2098.)" (component is not thread-safe) 

我該怎麼在完全錯誤的方向在加載過程中獲得QTMovieLoadStateError,還是我只是缺少的幾行代碼那會使這個「線程安全」?

感謝您的任何幫助。

回答

0

之前在後臺(非主)線程與QTMovie對象時,你需要調用:

[QTMovie enterQTKitOnThread] 

[QTMovie enterQTKitOnThreadDisablingThreadSafetyProtection] 

選擇哪一個將取決於影片的編解碼器文件。第二個變體將允許非線程安全組件;對於一些罕見的編解碼器來說,這將是唯一的方法。

[QTMovie exitQTKitOnThread] 
+0

感謝您的幫助:

調用必須成對出現!這確實消除了線程錯誤,但現在我得到了'必要的數據引用無法解析.'。 – flutillie

+0

我發現http://stackoverflow.com/questions/5582274/qtkit-strange-error具有相同的錯誤,但解決方案沒有幫助。當我檢查'QTMovieLoadStateError'的'QTMovieLoadStateAttribute'的值時,我只會看到這些錯誤。 – flutillie

+0

影片可能需要一些時間才能加載。您需要檢查attributeForKey:'QTMovieLoadStateAttribute'並等待它等於'QTMovieLoadStateComplete'。例如'while([[movie attributeForKey:QTMovieLoadStateAttribute] longValue]!= QTMovieLoadStateComplete) {[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; }' – Davyd