2013-01-23 15 views
6

मैं काम कर रहा हूँ का उपयोग कर एक iOS एप्लिकेशन है एक फ़ाइल पर ईमेल करके अपने डेटा को निर्यात करने की अनुमति देता है पर। ऐप फ़ाइल-प्रकार को एक्सटेंशन 'sainputs' वाली फ़ाइल के रूप में पंजीकृत करता है (ऐसा इसलिए है कि ऐप मूल्यों को आयात करने के लिए ईमेल या ड्रॉपबॉक्स से फ़ाइल भी खोल सकता है - यह ठीक काम करता है)। मैं फ़ाइल को किसी अन्य एप्लिकेशन पर भेजने की संभावना जोड़ने की कोशिश कर रहा हूं जो विविध प्रकार की फाइलें खोल सकता है। ड्रॉपबॉक्स एक अच्छा उदाहरण है - यह किसी भी प्रकार की फाइल खोलने में सक्षम होना चाहिए।iOS: त्रुटि जब ड्रॉपबॉक्स के लिए आवेदन विशेष फ़ाइल को भेजने UIDocumentInteractionController

मैं वर्तमान में एक UIDocumentInteractionController कि फ़ाइल का URL के साथ आरंभ नहीं हो जाता प्रदर्शित करके इस प्रयास कर रहा हूँ। जब इसे प्रदर्शित किया जाता है, तो ड्रॉपबॉक्स ऐप फ़ाइल को खोलने के लिए उपलब्ध विकल्पों में से एक के रूप में दिखाई देता है।

हालांकि, जब मैं ड्रॉपबॉक्स आइकन दबाएं, कुछ नहीं होता और कंसोल में मैं निम्न पाठ देखें:

LaunchServices: Invalid LSOpenOperation request - No applications found to open document 

एप्लिकेशन की plist फ़ाइल में यह यूटीआई com.mycompany.myapp होने एक दस्तावेज प्रकार पंजीकृत करता है। sainputs, और यह निर्यात किए गए प्रकार यूटीआई को पहचानकर्ता com.mycompany.myapp.sainputs पंजीकृत करता है, सार्वजनिक फ़ाइल नाम एक्सटेंशन 'sainputs' और MIME-type myapp/inputs के साथ।

यहाँ plist फ़ाइल से प्रासंगिक अंश इस प्रकार हैं:

<key>CFBundleDocumentTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleTypeName</key> 
      <string>My App's File Type</string> 
      <key>LSHandlerRank</key> 
      <string>Owner</string> 
      <key>LSItemContentTypes</key> 
      <array> 
       <string>com.mycompany.myapp.sainputs</string> 
      </array> 
     </dict> 
     <array> 
. 
. 
. 
<key>UTExportedTypeDeclarations</key> 
    <array> 
     <dict> 
      <key>UTTypeConformsTo</key> 
      <array/> 
      <key>UTTypeDescription</key> 
      <string>My App's File Type</string> 
      <key>UTTypeIdentifier</key> 
      <string>com.mycompany.myapp.sainputs</string> 
      <key>UTTypeTagSpecification</key> 
      <dict> 
       <key>public.filename-extension</key> 
       <string>sainputs</string> 
       <key>public.mime-type</key> 
       <string>steuerapp/inputs</string> 
      </dict> 
     </dict> 
     <array> 

मैं plist फ़ाइल में 'आवेदन/ओकटेट धारा' के लिए माइम-प्रकार को बदलने की कोशिश की। इससे कोई फर्क नहीं पड़ता।

किसी भी सलाह/विचारों अत्यधिक सराहना की जाएगी।

+2

'UTTypeConformsTo' कुंजी के लिए एक मूल्य प्रदान करें। शायद 'public.data' काम करेगा। – rmaddy

+0

धन्यवाद rmaddy! वह चाल है! कृपया इसे एक उत्तर के रूप में पोस्ट करें, इसलिए मैं इसे सही उत्तर के रूप में चिह्नित कर सकता हूं। – bgh

उत्तर

5

@maddy सुझाव दिया और @bgh पुष्टि की है, इस मुद्दे को हल करती है के रूप में। मैं बस एक ही समस्या में भाग गया।

अपने कस्टम यूनिवर्सल टाइप को परिभाषित करने के अलावा आप भी संकेत कर सकते हैं कि इस प्रकार के एक एक अधिक सामान्य प्रकार के 'उप-प्रकार' है। जैसे स्पष्ट रूप से कुंजी UTTypeConformsTo में यूटीआई 'public.data' निर्दिष्ट करने के द्वारा इस प्रकार है:

UIDocumentInteractionController *documentController = ...; 
documentController.UTI = @"com.mycompany.myapp.sainputs"; 

Apples documentation about this can be found here.

0

:

<dict> 
    <key>UTTypeConformsTo</key> 
     <array> 
     <string>public.data</string> 
     </array> 
    <key>UTTypeDescription</key> 
     <string>My App's File Type</string> 
    <key>UTTypeIdentifier</key> 
     <string>com.mycompany.myapp.sainputs</string> 
    <key>UTTypeTagSpecification</key> 
     <dict> 
     <key>public.filename-extension</key> 
      <string>sainputs</string> 
     <key>public.mime-type</key> 
      <string>steuerapp/inputs</string> 
     </dict> 
</dict> 

फिर आप UIDocumentInteractionController में एक तर्क के रूप अपने कस्टम यूटीआई निर्दिष्ट कर सकते हैं

मैं क्योंकि मैं देवी पर एक और एप्लिकेशन था क्लास जवाब काम नहीं कर सकता है: इस मामले में किसी और को भी हो सीई ("प्रकाश" संस्करण) भी गलत सेटिंग्स के साथ, एक ही यूटीआई घोषित करता है। आपको प्रत्येक ऐप में "public.data" जोड़ने की आवश्यकता है जो इसे काम करने से पहले प्रकार घोषित करता है।

बस सुनिश्चित करने के लिए, मैं केवल एक एप्लिकेशन स्थापित डिबगिंग की सिफारिश करेंगे तो एक दूसरे को जोड़ने और देखें कि सब कुछ अभी भी काम करता है।

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