2012-02-16 5 views
62

मौजूद फ़ाइलों के लिए NO को वापस नहीं करना मेरे कोड फ़ाइल में एक बिंदु पर एक्स्टिस्ट्सएपपाथ: उन फ़ाइलों के लिए वापस नहीं लौटा रहा है जिनकी मैंने पुष्टि की है। मैं इस पर अपने सिर को खरोंच कर रहा हूं और यह नहीं समझ सकता कि यह क्यों काम नहीं कर रहा है, इसलिए इसे इस कोड में बदल दिया क्योंकि यह निर्देशिका बिल्कुल मौजूद है लेकिन अगर यह वैसे भी नहीं बनती है।fileExistsAtPath:

NSError* err = nil; 
NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory 
                 inDomain:NSUserDomainMask 
               appropriateForURL:nil 
                 create: YES 
                  error:&err]; 
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[dir absoluteString]]; 

इस कोड को चलाने के बाद एप्लिकेशन निर्देशिका फ़ोल्डर मौजूद है और त्रुटि 0 है, अभी तक मौजूद नहीं है।

यह कैसे हो सकता है?

TIA

+0

तुम भी जाँच नहीं कर रहे हैं URLForDirectory ... विधि रिटर्न शून्य – bneely

+0

आगे, दस्तावेज यह इंगित नहीं करता है कि निर्माण कार्य सिंक्रोनस या असीमित है या नहीं, लेकिन अपनी फ़ाइल से पहले कुछ सेकंड की देरी में चिपकने का प्रयास करें Exxath: कॉल करें और देखें कि परिणाम बदलता है या नहीं। जैसा कि मैंने उल्लेख किया है – bneely

+0

एर एनआईएल है। इसके अलावा निर्देशिका के पथ के साथ डीआईआर सही ढंग से आबादी हो रही है (यदि मैं इसे कंसोल या एनएसएलओजी में पीओ, तो इसकी सामग्री सही ढंग से सेट की जाती है)। इस कोड को कॉल करने से पहले निर्देशिका पहले से मौजूद है - अगर मैं ऐप को दो बार उदाहरण देता हूं तो मुझे अभी भी पता चलता है कि मौजूदा बूल 0 पर सेट किया जा रहा है। – Gruntcakes

उत्तर

129

आप [dir path], नहीं [dir absoluteString] उपयोग करना चाहिए।

+4

क्या आप कृपया ध्यान दें कि एमएफ अंतर क्या है जिसने मुझे एक घंटे बर्बाद कर दिया या तो मेरे कोड को डीबग कर दिया? – Mazyod

+10

पथ नियमित मार्ग देता है। absolStString एक फ़ाइल देता है: /// url एक स्ट्रिंग के रूप में। '(lldb) प्रिंट fileURL.path (स्ट्रिंग!) $ R0 ="/उपयोगकर्ता/जोशविसेनबेकर/लाइब्रेरी/डेवलपर/कोरसिम्युलेटर/डिवाइस/4ED0C33D-A9AB-49EF-9AD3-13396E7C3CCA/डेटा/कंटेनर/साझा/ऐपग्रुप/D2180E2E- A409-430E-AC47-C71353547417/jobs.plist " (lldb) प्रिंट fileURL.absoluteString (स्ट्रिंग!) $ R1 =" फ़ाइल: /// उपयोगकर्ता/जोशविसेनबेकर/लाइब्रेरी/डेवलपर/कोरसिम्युलेटर/डिवाइस/4ED0C33D-A9AB- 49EF-9AD3-13396E7C3CCA/डेटा/कंटेनर/साझा/ऐपग्रुप/डी 2180E2E-A409-430E-AC47-C71353547417/jobs.plist "' – macshome

+0

मैं पथ का उपयोग कर रहा हूं, फिर भी यह हर बार झूठी वापसी कर रहा है –

1

पथ और यूआरएल के बीच एक अंतर है। यूनिक्स प्रतिनिधित्व में एक पथ वह स्थान है जहां आपकी विशेष फ़ाइल या निर्देशिका मौजूद है। जैसा "/Users/username/Desktop/myfile.txt"

Wheres एक यूआरएल न केवल साथ ही स्थान लेकिन योजना में शामिल है, जैसे: http: // या https: // और हमारे मामले में एक फ़ाइल यूआरएल (file:///Users/username/Desktop/myfile.txt)

तरीके fileExistsAtPath या removeItemAtPath में पथ की जरूरत है की तरह एक यूआरएल के बजाय पैरामीटर।

जबकि copyItemAtURL:toURL:error:(NSError * _Nullable *)error जैसी विधियां यूआरएल की अपेक्षा करती हैं।

pathNSURL ऑब्जेक्ट का उपयोग पथ पुनर्प्राप्त करने के लिए करें। absoluteString आपको इस योजना के साथ पथ देता है।

4

मैं कुछ घंटे के लिए दीवार के खिलाफ अपने सिर को झुका रहा था। स्पष्ट रूप से xcode में प्रत्येक रन पर ऐप निर्देशिका पथ बदल रहा था। इसका यूयूआईडी हिस्सा। तो fullpath भंडारण के बजाय मैं पथ पोस्टफ़िक्स बने और लगाकर कि जो कुछ भी भंडारण वर्ग के साथ निहित है समाप्त हो गया: अस्थायी, कैश की गई या दस्तावेजों: - [

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