2012-09-20 22 views
15

पर विफल रहता है ऐसा लगता है कि खत्म हो रहा है आईओएस 6 सिम्युलेटर पर टूटा हुआ है - यह हमेशा के लिए लटकता है। अब इसे हटा दिया गया है और नए फिनिश द्वारा प्रतिस्थापित किया गया है WitingWithCompletionHandler: - जो कभी भी हैंडलर को कॉल नहीं करता है।AVAssetWriter finishWriting आईओएस 6 सिम्युलेटर

आईओएस 6 चलाने वाले वास्तविक उपकरणों पर, यह हमेशा ठीक काम करता है जैसा यह हमेशा किया जाता है। पिछले आईओएस सिमुलेटर में भी यह ठीक काम करता है। आईओएस 6 सिम्युलेटर में एक बग की तरह लगता है।

कोई और इसका अनुभव कर रहा है या मुझे गलत साबित कर सकता है?

उत्तर

2

ठीक है सिम्युलेटर पर एक काम मिला।

लगता रोक गतिरोध की तरह वीडियो प्रसंस्करण धागा तो एक समाधान के मुख्य थ्रेड के बजाय में बंद कॉल करने के लिए है:

//  in iOS6 Simulator this blocks the video processing thread call back in UI thread. 
//  BOOL stop = [assetWriter finishWriting]; 
[self performSelectorOnMainThread:@selector(stopInOtherThread) withObject:nil]; 

-(void)stopInOtherThread{ 
    //Stop doesn't block in MainThread 
    BOOL stop = [assetWriter finishWriting]; 
    NSLog(@" assetWriter finishWriting :%d",stop); 
} 

इस तरीके को finishWritingWithCompletionHandler

के लिए काम करने के लिए

मैं कोशिश करता हूँ प्रतीत नहीं होता और देखें कि क्या मैं ऐप्पल पर एक बग उठा सकता हूं।

+0

मैंने पहले ही एक बग पोस्ट किया है। विरोधाभास यह है कि आईओएस 6 के बाद से, अगर हम मुख्य धागे पर फिनिशवाइटिंग कहते हैं, तो लॉग दिखाता है: चेतावनी: -फिनिश लेखन मुख्य धागे पर नहीं बुलाया जाना चाहिए। – user1574100

+0

मुझे एक ही समस्या है। आईओएस 6 सिम्युलेटर को हैंडलर नहीं कहा जाता है, और स्थिति कभी भी AVAssetWriterStatusWriting को बदलती नहीं है। –

+1

मैंने एआरसी का उपयोग करने के लिए अपनी परियोजना को स्विच करने के बाद ही इसे प्राप्त करना शुरू कर दिया। –

11

मुझे यह समस्या भी थी, फिर मुझे एहसास हुआ कि मैं एंडशनऑटसोर्सटाइम को कॉल नहीं कर रहा था: एक शुरू करने के बाद। इसने मेरे मुद्दे को हल किया।

+1

यह मेरे लिए भी काम करता है। यदि आप 'rdWritingWithCompletionHandler:' को अपने 'AVAssetWriter' ऑब्जेक्ट पर कॉल करते हैं तो आपको पूरा करने के लिए हैंडलर को लागू करने के लिए ** ** ** endSessionAtSourceTime: 'को कॉल करना होगा। (दस्तावेज बताते हैं कि यदि आप 'फिनिशवाइटिंग' का उपयोग करते हैं, तो आपको इसे कॉल करने की आवश्यकता नहीं है, जिसे आईओएस 6.0 के बाद से हटा दिया गया है।) – SolidSun

+0

मेरे लिए भी काम किया। डेडलॉक हमेशा नहीं होता था, लेकिन आउटपुट फ़ाइल को 'endSessionAtSourceTime:' कॉल के बिना सही ढंग से लिखा नहीं गया था। –