2012-01-26 16 views
6

मैं iCloud में अपनी फ़ाइलों को प्रबंधित करने के लिए UIManagedDocument s का उपयोग कर रहा हूं। स्थापित करने के बाद NSMetadataQuery तो जैसे:NSMetadataQuery कस्टम फ़ाइल पैकेज प्रकार को अनदेखा कर रहा है

iCloudQuery = [[NSMetadataQuery alloc] init]; 
[iCloudQuery setSearchScopes: 
    [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]]; 
[iCloudQuery setPredicate: 
    [NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]]; 

मैं एक जिज्ञासु समस्या का सामना कर रहा हूँ - जब मेरे दस्तावेजों एक फ़ाइल एक्सटेंशन के बिना नाम हैं या .txt की तरह एक सार्वजनिक एक्सटेंशन (उदाहरण के @"NewDocument2" के लिए), मेटाडाटा क्वेरी सही ढंग से पाता है DocumentMetadata.plist फ़ाइल। हालांकि, मेरे कस्टम फ़ाइल एक्सटेंशन का उपयोग करते समय, क्वेरी कभी भी कुछ नहीं पाती ... जब क्वेरी शुरू होती है, न ही जब मैं एक नया दस्तावेज़ जोड़ता हूं।

ऐसा लगता है कि क्वेरी शायद मेरे दस्तावेज़ को अपने कस्टम फ़ाइल एक्सटेंशन के साथ देख रही है, यह वास्तव में नहीं है कि यह वास्तव में निर्देशिका (किसी भी दर पर एक फ़ाइल पैकेज) है, और ऐसा नहीं लगता है DocumentMetadata.plist फ़ाइल खोजने के लिए अंदर। हालांकि, मैंने ऐप के info.plist में अपना कस्टम यूटीआई घोषित कर दिया है।

शायद मैंने अपना यूटीआई गलत तरीके से घोषित कर दिया है? मैंने ऐप्पल के दिशानिर्देशों का पालन किया (Document-Based App Programming Guide for iOS और Uniform Type Identifiers Overview में) इसे बनाने में, लेकिन ऐसा लगता है कि कुछ गलत है।


संपादित करें: तहत info.plist में 'निर्यात यूटीआई', मेरे प्रकार 'com.apple.package' के अनुरूप निर्धारित है।


संपादित करें: मैं अभी भी इस मुद्दे के साथ संघर्ष कर रहा हूँ। मैं फाइल एक्सटेंशन का उपयोग न करके अब इसके आसपास काम कर रहा हूं।

कस्टम फ़ाइल एक्सटेंशन का उपयोग करते समय, मैं iCloud मेटाडेटा क्वेरी परिणामों को संसाधित कर रहा हूं और DocumentMetadata.plist फ़ाइल निश्चित रूप से फ़ाइल पैकेज के अंदर है, लेकिन मेटाडेटा क्वेरी इसे नहीं देख सकती है। जब क्वेरी परिणामों की गणना, निम्नलिखित लॉग में छपा है:

<iCloud Container URL>/Documents/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/DocumentMetadata.plist 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>%202)/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>)/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/_EXTERNAL_DATA/ 
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/persistentStore 

(वहाँ भी एक "CoreDataLogs" निर्देशिका में फ़ाइलों का एक समूह रहे हैं, तथापि मैं उन्हें यहाँ संक्षिप्तता के लिए नहीं दिखाया जा सका)।

मैं केवल यह सोच सकता हूं कि यह समस्या गलत तरीके से मेरे फ़ाइल पैकेज UTI बनाने के साथ कुछ करने के लिए है। क्या किसी और ने सफलतापूर्वक iCloud के साथ कस्टम फ़ाइल संकुल का उपयोग किया है? क्या यह एक बग है?

+1

अभी भी UIManagedDocument दर्द से जूझ रहा है। यह वास्तव में एक उत्तर नहीं है, लेकिन आप "दस्तावेज़" फ़ोल्डर के बाहर UIManaged दस्तावेज़ों को संग्रहीत करने पर विचार करना चाहेंगे। अन्यथा, जब उपयोगकर्ता सेटिंग्स-> iCloud-> संग्रहण और बैकअप-> संग्रहण प्रबंधित करें-> पर, वे DocumentMetadata.plist प्रविष्टियों को देखेंगे। मैंने दस्तावेज़ों के समान स्तर पर अपने दस्तावेज़ों को एक अलग फ़ोल्डर में रखा है। फिर आपकी क्वेरी को NSMetadataQueryUbiquitousDataScope का उपयोग करना चाहिए। सुनिश्चित नहीं है कि आपको फ़ाइल एक्सटेंशन की आवश्यकता होगी, या यदि इस मामले में यह समझ में आता है। – Daniel

उत्तर

3

यह डिज़ाइन द्वारा है।

एपीआई स्पॉटलाइट के लिए भी इस तरह से काम करता है। यह पैकेज दस्तावेजों में नहीं उतरना चाहिए क्योंकि उन दस्तावेजों की सामग्री मूल रूप से निजी होती है। ICloud के साथ, यह इतना अधिक समझ में नहीं आता है, लेकिन मुझे संदेह है कि वे इसे बदल नहीं पाएंगे। यह एपीआई के इस्तेमाल के आधार पर दो अलग-अलग तरीकों से काम करने के लिए समझ में नहीं आता है।

मुझे लगता है कि यह एक ऐतिहासिक बात है - मैक पर आप अपने कस्टम दस्तावेज़ प्रकार को संभालने के लिए स्पॉटलाइट आयातक को कार्यान्वित कर सकते हैं। आईओएस पर, मुझे नहीं लगता कि यह अभी तक संभव है (अगर मैं गलत हूं तो मुझे सही करें)। तो अभी के लिए, आपको सिर्फ एपीआई के इस 'फीचर' के आसपास काम करना होगा।

आप इसके बजाय दस्तावेज़ की खोज कर सकते हैं और फिर वहां से मेटाडेटा प्राप्त कर सकते हैं। अन्यथा, आपके द्वारा किए गए एक्सटेंशन को चेन करना काम करना चाहिए।

1

आईओएस 5.1 बीटा 3 या नए में अपग्रेड करें। मुझे विश्वास नहीं है कि UIManagedDocument + iCloud आईओएस 5.0 में बिल्कुल काम करता है।

+0

असल में मैंने हाल ही में नवीनतम 5.1 बीटा में अपग्रेड किया था, लेकिन एक्सकोड 4.3 के वर्तमान पूर्वावलोकन में अविश्वसनीय रूप से निराशाजनक कोड फोल्डिंग/इंडेंट बग के कारण 5.0 पर वापस आ गया। नवीनतम बीटा का उपयोग करते समय, यह फ़ाइल पैकेज समस्या अभी भी मौजूद थी। – Stuart

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