2011-09-22 29 views
6

मुझे जेएसओएन (एसबीजेसन का उपयोग करके) से एनएस डिक्शनरी मिल रही है, और मैं इसे स्टोर करना चाहता हूं। मैंwriteToFile विफल रहता है - मैं कैसे डिबग करता हूं यह विफल रहता है (कौन से टूल्स)?

[liveData writeToFile:localFilePath atomically:YES] 

का उपयोग कर रहा हूं और यह विफल हो रहा है। डेटा अपने सभी एनएसएसटींग, एनएस डिक्शनरी और एनएसएआरएआरई (जो "परमाणु रूप से: हाँ" मांगों की तरह दिखता है) दिखता है। मैंने कहीं भी स्थानीय फ़िलपाथ का उपयोग किया था।

तो मेरा सवाल है: मैं कैसे पता लगा सकता हूं कि समस्या कहां है? लिखने के लिए मैं कौन से टूल्स का उपयोग कर सकता हूं समझने के लिए टाइपफाइल विफल क्यों होता है? लॉग एक त्रुटि संदेश नहीं दिखाता है।

+0

क्या आपने यह देखने के लिए अपना 'स्थानीय फ़िलपाथ' एनएसएलॉग किया है कि मूल्य क्या है? क्या आप वाकई इसे बचाने के लिए एक अद्वितीय नाम देते हैं? – msgambel

+0

मैं सहमत हूं कि समस्या आपके पथ की संभावना है, क्या आप उस कोड को शामिल कर सकते हैं? – Brodie

+1

मैंने अपना स्थानीय फ़ाइलपाथ लॉग किया है, और मैंने इसे किसी अन्य स्टोर करने के लिए अपने कोड में कहीं और इस्तेमाल किया है (केवल फ़ाइल नाम बदलना - यह एनएसटी समकालीन डायरेक्टरी() प्लस फ़ाइल नाम है) इसलिए मुझे पूरा यकीन है कि यह नहीं है। लेकिन वास्तव में मेरा सवाल है: मैं इस मुद्दे को कैसे डीबग कर सकता हूं - मैं विफलता के बारे में और कैसे जान सकता हूं? क्या लॉगर के बाहर एक्सकोड में कोई त्रुटि कोड या कुछ डीबगिंग टूल है जो मुझे पिन करने में मदद करेगा? या क्या मुझे इसे पहचानने के लिए परीक्षण और त्रुटि का उपयोग करने की आवश्यकता है? –

उत्तर

7

यह कई कारणों से हो सकता है:

  • पथ आप के लिए लिख रहे हैं, गलत लिखने योग्य नहीं है (यदि आप इसे के लिए लेखन पहुँच नहीं है), या मूल निर्देशिका नहीं मौजूद है करता है (यदि localFilePath है "/path/to/file.plist" लेकिन निर्देशिका "/ path/to /" मौजूद नहीं है, यह असफल हो जाएगी)
  • लाइवडेटा शब्दकोश में ऐसी वस्तुएं होती हैं जो PropertyList ऑब्जेक्ट्स नहीं हैं। केवल NSData, NSDate, NSNumber, NSString, NSArray, या NSDictionary वस्तुओं एक संपत्ति सूची फ़ाइल में (लिखा जा सकता है और writeToFile:atomically:एक plist फाइल करने के लिए लिखने ऐसा शब्दकोश की क्या ज़रूरत है कि विधि की सफलता के लिए केवल plist ऑब्जेक्ट्स)
+1

ध्यान देने योग्य भी है, अगर आपके पास 'डिक्शनरीफाइल' शब्द में 'न्यूल' मान है तो असफल हो जाएगा। – inorganik

+0

शब्दकोश में कक्षा NSNull का कोई भी मूल्य असफल हो जाएगा। तो, शब्दकोश में डालने से पहले सभी मानों को स्पष्ट रूप से जांचें। मेरे मामले में, मैं JSON (सर्वर डेटा) से मान पढ़ रहा था जो ऐसे मानों का एक अच्छा स्रोत है। – zinnuree

1

मैंने डिस्क पर एक NSDictionary को केवल कुंजी और मानों के साथ डिस्क के साथ सहेजने का प्रयास किया है। कुंजी को एनएसएसटींग कार्यों में स्विच करना, लेकिन जब वे कुंजी एनएसएनंबर नहीं हैं। क्या कुंजी को एनएसएसटींग होना चाहिए?

संपादित करें: अब मुझे बेहतर पता है कि यह कोई वस्तु हो सकती है जो हैश का जवाब दे; अक्सर यह एनएसएसटींग है, यद्यपि।

+1

हां वे करते हैं। ऊपर मेरा जवाब देखें। – badweasel

+0

Sigh ... को डेटा को फ़ाइल में सहेजने के लिए NSNumber से NSString में कनवर्ट करना पड़ा। पारितोषिक के लिए धन्यवाद। –

4

मुझे पता है कि यह 2 साल पुराना सवाल है। लेकिन चूंकि मुझे अभी भी यही समस्या थी और मैंने इसे ठीक किया है। मैं शर्त लगाता हूं कि आपके NSDictionary में कुछ कुंजियां हैं जो NSStrings नहीं हैं।

इसके बजाय तरह कुंजीयन के

:

[_myDictionay setObject:thisObj forKey:[NSNumber numberWithInt:keyNumber]]; 

कुंजी इस तरह से:

[_myDictionay setObject:thisObj forKey:[NSString stringWithFormat:@"%i",numberWithInt:keyNumber]]; 

कि मेरी समस्या सही तय।

शीर्ष मार्ग को प्लेलिस्ट फ़ाइल में सहेजा नहीं जा सकता है।

चूंकि आपको JSON रूपांतरण से आपकी जानकारी मिल रही है, इसलिए यह संभव है कि वहां कुछ ऑब्जेक्ट्स या कुंजियां हैं जो NSNumbers हैं। आपको उन्हें बदलना होगा। लेकिन यह एक दर्द है।

इसलिए चूंकि आपके पास पहले से ही जेसन में है, बस इसे पूरी तरह से जेसन स्ट्रिंग के रूप में @ "डेटा" कुंजी में संग्रहीत करें और जब आप प्लिस्ट को बाद में अपनी सरणी या तीर में लोड करते हैं तो इसे फिर से विस्तारित करें।

+0

यह मेरी समस्या को हल करता है (मेरे मामले में, मेरे पास चाबियाँ थीं जो 'एनएसडीएटी' थीं, हालांकि, यह अभी भी सवाल का जवाब नहीं देती है कि डीबग के लिए कौन से टूल्स उपलब्ध हैं। यह बहुत अच्छा होगा अगर मैं कोड पर कुछ ऐसा कर सकता था जिसके साथ कुछ कहा जाएगा "* NSDate एक प्लिस्ट फ़ाइल * लिखने के लिए वैध कुंजी नहीं है" या कुछ ऐसे। – Olie

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