2012-12-24 10 views
6

का उपयोग करके एक्सकोड में उनकी उपलब्धता के आधार पर सशर्त रूप से लिंक ढांचे का सर्वोत्तम तरीका मैं कोको स्पर्श से आधारित एक उद्देश्य-सी ढांचा विकसित कर रहा हूं और जेएसओएन और एक्सएमएल दोनों के लिए डेटा पार्सिंग के लिए अन्य ढांचे को देख रहा हूं।ऑब्जेक्टिव-सी

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

  1. कंपाइलर सेटिंग्स के साथ ऐसा करने का सबसे अच्छा तरीका क्या है? मेरे पास ने "आवश्यक" से "वैकल्पिक" से ढांचे को शामिल करने वाले बहुत से डेवलपर्स को देखा है, लेकिन मुझे नहीं लगता कि या तो एसबीजेसन या टच एक्सएमएल को एक उद्देश्य-सी फ्रेमवर्क पैकेज (.framework) का उपयोग करके संकलित या कार्यान्वित किया गया है।) या एक सी स्थिर पुस्तकालय (.a) और इस प्रकार इसका लाभ नहीं ले पाएगा।

  2. कोड में इसे सशर्त रूप से कार्यान्वित कैसे किया जाएगा? उदाहरण के लिए एसबीजेसन का हेडर #import "SBJson.h" कंपाइलर निर्देश के माध्यम से आयात किया जाता है, लेकिन यदि आवश्यक हेडर नहीं मिलता है तो यह असफल हो जाएगा।

+0

"सबसे आसान" जिस तरह से हेडर के लिए जाँच करने के लिए गार्ड (शामिल क्या आप जानते हो सकता है की जरूरत है, पूरे # HAS_MYHEADER_DECL चीज़ को परिभाषित करें जब आप एसी हेडर बनाते हैं तो एक्सकोड में शामिल होगा), और उस पर आधारित कुछ सशर्त संकलन करें। बेशक, यह बिल्कुल विश्वसनीय नहीं है। – CodaFi

उत्तर

3

आप ज शामिल कर सकते हैं लेकिन जब यह से एक वस्तु का उपयोग कर आप NSClassFromString से कॉल करने के लिए

+0

यह एक अच्छा तरीका होगा, लेकिन एलएचवीएम/एक्सकोड एक त्रुटि फेंक नहीं देगा अगर .h फ़ाइल नहीं मिली है। – KellyTheDude

+1

वाह! कोई बात नहीं। मैं देखता हूं कि आप क्या प्राप्त कर रहे हैं। NSClassFromString का उपयोग करने से क्लास आवंटन और init का उपयोग कर प्रारंभ कर सकता है, और हेडर फ़ाइल जांच कक्षा को शामिल नहीं करने में त्रुटि को फेंक नहीं देती है। दूसरे शब्दों में, NSClassFromString() का उपयोग करके संकलन समय आयात निर्देशों को पूरी तरह से बाधित करता है। आईडी के साथ एक संदेश का उपयोग करके और संदेश भेजने के लिए एक उदाहरण गुजरने की तरह। जादू! धन्यवाद! – KellyTheDude