5

युक्त किसी कारण यह नमूना कोड काम करता है के लिए कार्रवाई करने के लिए विफल रहता है:CFPropertyListCreateDeepCopy सरणी/शब्दकोश NSNull

NSArray *immutable = @[ @"a", @"b", @"c" ]; 
NSMutableArray *mutable = (__bridge id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFArrayRef)immutable, kCFPropertyListMutableContainers); 

और इस कोड को रूपांतरण के परिणामस्वरूप nil पैदा करता है:

NSArray *immutable = @[ @"a", [NSNull null], @"c" ]; 
NSMutableArray *mutable = (__bridge id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFArrayRef)immutable, kCFPropertyListMutableContainers); 

मैं पता लगाने की कोशिश इस फ़ंक्शन का उपयोग करते समय NSNull का कोई उल्लेख नहीं किया जा रहा है। मुझे संदेह है कि विधि के तरीके से जांच करने के लिए इसका कुछ तरीका है कि क्या संपत्ति उत्परिवर्तनीय है या नहीं, लेकिन मैं वास्तव में तथ्यों के साथ इसे वापस नहीं कर सकता।

कोई विचार?

उत्तर

6

सेब डेवलपर फोरम के दयालु लोगों ने इस मुद्दे को इंगित किया कि संपत्ति सूची संरचना डेटा प्रकारों के बारे में सख्त है, जिसके साथ यह काम कर सकती है। NSNull स्वीकृत लोगों में से एक नहीं है।

apple docs से

:

संपत्ति सूचियों बुनियादी कोर फाउंडेशन प्रकार CFString, CFNumber, CFBoolean, CFDate, और CFData से निर्माण कर रहे हैं।

+0

क्या आप एक शून्य मूल्य को स्वीकार करने के लिए वैकल्पिक या कामकाज के बारे में जानते हैं, क्योंकि हम इसे किसी JSON API से डेटा पर उपयोग कर रहे हैं जिसमें कुछ स्थानों पर 'शून्य' है? इस स्रोत के अनुसार – Sathvik

+1

http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (CFPropertyListRef CFPropertyListCreateDeepCopy के लिए खोजें) यह काफी संभव नहीं है। हो सकता है कि पूर्वनिर्धारित स्थिरता के साथ शून्य को प्रतिस्थापित करने का प्रयास करें जो आपके डेटा सेट में आने की संभावना नहीं है? –