2017-04-30 13 views
7

के माध्यम से मैं UIActivityController requestAVAsset का उपयोग कर के माध्यम से वीडियो PHAsset साझा करने के लिए कोशिश कर रहा हूँ। यह मैसेजिंग के साथ काम करता है, लेकिन एयरड्रॉप के साथ नहीं, जो 'असफल' के रूप में इंगित करता है।शेयरिंग वीडियो PHAsset UIActivityController

PHCachingImageManager.default().requestAVAsset(forVideo: asset, options: nil, resultHandler: 
    { (givenAsset, audioMix, info) in 

     let videoAsset = givenAsset as! AVURLAsset 
     let videoURL = videoAsset.url 

     DispatchQueue.main.async { 
      let activityViewController = UIActivityViewController(
       activityItems: [videoURL], 
       applicationActivities: nil) 
      activityViewController.excludedActivityTypes = [UIActivityType.saveToCameraRoll] 

      if let popoverPresentationController = activityViewController.popoverPresentationController { 
       popoverPresentationController.barButtonItem = (sender) 
      } 

      self.present(activityViewController, animated: true, completion: nil) 
     } 
}) 

यह ठीक से UIActivityController ऊपर डाल करने के लिए और केवल कुछ गतिविधियों के साथ काम लगता है:

  • संदेश - ✔️Works, ठीक से वीडियो निर्यात करता है।
  • AirDrop - ✖️Shows "विफल"
  • ड्रॉपबॉक्स - ✖️Puts अप उचित ड्रॉपबॉक्स देखें, फिर भी कहते हैं, "अज्ञात त्रुटि उत्पन्न हुई"

enter image description here

उत्तर

4

मैं PHAssets के साथ काम करते समय भी इसी तरह के अजीब व्यवहार में भाग लेते हैं। मेरा अनुमान है कि यह एक (जानबूझकर) अनियंत्रित सुरक्षा/सैंडबॉक्सिंग प्रतिबंध है।

मैं अंतर्निहित फ़ाइल को उपयोगकर्ता निर्देशिका में कॉपी करके और फिर कॉपी की गई फ़ाइल पर ऑपरेशन कर कर इस समस्या के आसपास काम करने में सक्षम था।

मैंने इसे एक लूप में किया था। कभी-कभी, प्रतिलिपि एक अस्पष्ट फ़ाइल अनुमतियों त्रुटि के साथ विफल रहता है। जब ऐसा होता है, तो मैं इसे कुछ सेकंड के बाद पुनः प्रयास करता हूं (DispatchQueue.main.asyncAfter का उपयोग करके)। आखिरकार, यह काम करता है!

+0

यह सुनिश्चित करने में आप कैसे सक्षम थे कि इसे दस्तावेज़ फ़ोल्डर से हटा दिया गया है? – Gizmodo

+1

मैंने इन दो तरीकों से किया: 1) मेरा उपयोग केस एस 3 पर वीडियो अपलोड कर रहा था। मुझे पता था कि यह कब समाप्त हुआ, और फ़ाइल को हटा सकता है। 2) बैकअप के रूप में, मैंने कॉपी की गई फ़ाइलों (एनएसयूसर डीफॉल्ट में) की एक सूची जारी रखी, और ऐप लॉन्च पर समय-समय पर हटाए गए स्टेल फाइलों को हटा दिया। साथ ही, मैंने इन फ़ाइलों को एक अस्थायी निर्देशिका में संग्रहीत किया है (जैसा कि 'NSFileManager.URLForDirectory (.ememReplacementDirectory ...) से प्राप्त किया गया है। सबसे बुरे मामले में, आईओएस अंततः फाइलों को साफ़ करता है। –

+0

@Gizmodo अगर यह काम करता है तो आप जवाब स्वीकार कर सकते हैं तुम्हारे लिए? धन्यवाद! –

संबंधित मुद्दे