2012-05-23 10 views
8

के साथ प्रोजेक्ट में एआरसी के बिना एक परियोजना जोड़ना एक्स कोड में, यदि मैं स्वचालित संदर्भ गिनती (एआरसी) के साथ एक नई परियोजना बनाता हूं, और फ़ाइल के माध्यम से एक मौजूदा गैर-एआरसी प्रोजेक्ट जोड़ता हूं -> फाइलें जोड़ें (जिसे माना जाता है) वर्कस्पेस में जोड़ना? वर्कस्पेस टर्म के बारे में निश्चित नहीं है), क्या यह काम करेगा? तो इस परियोजना में मैं जो नया कोड लिखता हूं वह एआरसी कोड हो सकता है?एआरसी

जब आप इस तरह से प्रोजेक्ट जोड़ते हैं, तो फाइलें "संकलित स्रोत" में सूचीबद्ध नहीं होती हैं; इसलिए, मेरे पास "-फनो-ओबीजेसी-आर्क" सेट करने के लिए कुछ भी नहीं है।

मुझे पता है कि MapBox-ios-example ऐसा करने लगता है। क्या आप इसे इसमें जोड़ते हैं और इसके बारे में नहीं सोचते?

एक अलग सवाल यह है कि अगर यह एक गैर-एआरसी स्थिर पुस्तकालय (.a) है तो मैं अपने एआरसी परियोजना से जुड़ रहा हूं? क्या मुझे गैर-एआरसी पुस्तकालय में कक्षाओं के साथ कुछ खास करना है?

संपादित करें: देर से प्रतिक्रिया के लिए हाय क्षमा करें।

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

हालांकि मुझे अभी भी मेरे पहले प्रश्न पर संदेह है। मैपबॉक्स उदाहरणों और निर्देशों के अनुसार, मैं अपने वर्तमान एआरसी प्रोजेक्ट में स्वयं एक गैर-एआरसी "प्रोजेक्ट फ़ाइल" जोड़ रहा हूं)। मुझे ज़ोर देना चाहिए कि मैं प्रोजेक्ट में स्रोत फ़ाइलों (.m .c) को अलग-अलग नहीं जोड़ रहा हूं लेकिन प्रोजेक्ट फ़ाइल जोड़ रहा हूं। .m और .c एक अलग फ़ोल्डर में एक अलग फ़ोल्डर में प्रतीत होता है। और इस मैपबॉक्स प्रोजेक्ट में [व्यू रिलीज] जैसे कॉल हैं और मुझे चेतावनी को चुप करने के लिए उस विशेष-नोनो-ओबीजेसी-आर्क ध्वज की आवश्यकता नहीं है क्योंकि चेतावनियां नहीं हैं।

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

यहां एक स्क्रीन शॉट है। enter image description here। ऑफ़लाइनस्पॉटी मैंने बनाई गई एआरसी फ़ाइल है। MapView.xcodeproj गैर-एआरसी प्रोजेक्ट है जिसे मैंने जोड़ा है। उम्मीद है कि छवि चीजों को थोड़ा सा स्पष्ट करती है।

+1

अपने दूसरे प्रश्न का उत्तर देने के लिए, एआरसी कोड गैर-एआरसी कोड के साथ बाइनरी-संगत है, इसलिए आप बिना किसी समस्या के एआरसी कोड (या बातचीत) के साथ गैर-एआरसी कोड का उपयोग कर सकते हैं। – zneak

+0

मुझे मैपबॉक्स के साथ भी यही समस्या है, आपने इसे कैसे हल किया? – Stephanie

+0

क्या आप विशिष्ट हो सकते हैं क्योंकि मुझे यकीन नहीं है कि आप किस समस्या का जिक्र कर रहे हैं। – huggie

उत्तर

0

सवाल नीचे टिप्पणी के अनुसार है: "कैसे करने के लिए MapBox iOS SDK जोड़ने के लिए मेरी प्रोजेक्ट? "

आप इन निर्देशों का पालन कर सकते हैं अपनी खुद की परियोजना के लिए एक ओपन सोर्स प्रोजेक्ट से एक स्थिर lib शामिल करने के लिए: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

एक अलग सवाल क्या है अगर यह एक गैर एआरसी स्थिर पुस्तकालय है (ए) मैं अपने एआरसी परियोजना से जुड़ा हूं? क्या मुझे गैर-एआरसी पुस्तकालय में कक्षाओं के साथ कुछ खास करना है?

स्थिर पुस्तकालय पहले ही संकलित है इसलिए आपको इसके बारे में चिंता करने की आवश्यकता नहीं है।

+0

यह मेरे लिए प्रतीत होता है जब मैं अपने एआरसी प्रोजेक्ट में एक गैर-एआरसी प्रोजेक्ट शामिल करता हूं, यह मुझे अपने स्वयं के प्रोजेक्ट में "रिलीज" जैसे स्टेटमेंट लिखने की अनुमति नहीं देता है। हालांकि शामिल परियोजना को -फनो-ओबीजेसी-आर्क की आवश्यकता नहीं है क्योंकि यह अभी भी एक गैर-एआरसी है, और यह संकलित करता है। – huggie

+0

आपके प्रोजेक्ट प्रकार क्या हैं? क्या एआरसी एक आईओएस ऐप है? – nverinaud

+0

हां, एआरसी एक और गैर-एआरसी दोनों आईओएस ऐप हैं। गैर-एआरसी एक मैपबॉक्स का मैपबॉक्स-आईओएस-एसडीके प्रोजेक्ट है। – huggie

10

यदि आप एआरसी का उपयोग करने वाली किसी परियोजना में गैर-एआरसी शामिल कर रहे हैं, तो आपको सभी गैर-आर्क-स्रोत फ़ाइलों पर -fno-objc-arc कंपाइलर ध्वज सेट करने की आवश्यकता होगी।

एक्सकोड में ऐसा करने के लिए, अपने सक्रिय लक्ष्य पर जाएं और "चरण बनाएं" टैब का चयन करें। अब प्रत्येक गैर-एआरसी स्रोत फ़ाइलों का चयन करें, एंटर दबाएं, -fno-objc-arc डालें और फिर इन फ़ाइलों के लिए एआरसी को अक्षम करने के लिए "पूर्ण" करें। (दुर्भाग्य से आपको प्रत्येक फ़ाइल के लिए यह लाइन जोड़नी है और समूह संपादन जैसी कोई चीज़ नहीं है! :-() अद्यतन: समूह संपादन के लिए, बस वांछित फ़ाइलों को चिह्नित करें और एंटर दबाएं! (कोई डबल क्लिक नहीं ! दर्ज) यह चाल है :-)

स्क्रीनशॉट देखें:! a mixture of ARC and non-ARC enabled files

+0

आपको पता है ऐसा लगता है कि मुझे -fno-objc-arc जोड़ने की आवश्यकता नहीं है क्योंकि यह कंपाइलर ध्वज के बिना गैर-एआरसी कोड के साथ ठीक संकलित करता है। मैं सीधे गैर-एआरसी स्रोत फ़ाइलों को नहीं जोड़ रहा हूं। मैं गैर-एआरसी प्रोजेक्ट फ़ाइल जोड़ रहा हूं। – huggie

1

आप अपने प्रोजेक्ट में कोई संकलित पुस्तकालय जोड़ रहे हैं तो आप कुछ भी बारे में चिंता करने की जरूरत नहीं है, इससे कोई फर्क नहीं होगा अगर यह एआरसी है या नहीं क्योंकि यह पहले ही संकलित है और इसलिए संकलक को संकलित करने की आवश्यकता नहीं है। स्थैतिक पुस्तकालय को अपनी परियोजना में खींचें और सुनिश्चित करें कि आप पॉपअप के Add to Targets अनुभाग के तहत अपना लक्ष्य चुनते हैं।

यदि आप अपनी प्रोजेक्ट में प्रोजेक्ट फाइल जोड़ रहे हैं, तो फ़ाइलों को अपने ऐप में खींचें फ़ोल्डर को खींचें। एक पॉपअप दिखाई देगा, और "लक्ष्य में जोड़ें" के तहत सुनिश्चित करें कि आपके ऐप का लक्ष्य चुना गया है। यदि आपने इसे सही तरीके से किया है, तो गैर-आर्क फ़ाइलें आपके लक्ष्य के निर्माण चरणों के compile sources अनुभाग में दिखाई देंगी। जैसा कि अन्य ने कहा है, फिर आप गैर-आर्क फ़ाइलों में -fno-objc-arc कंपाइलर ध्वज जोड़ सकते हैं। ऐसा करने के लिए, सभी गैर-आर्क फ़ाइलों को एक बार में चुनें और एंटर दबाएं। एक पॉपअप दिखाएगा और आप इसमें -fno-objc-arc दर्ज कर सकते हैं और फिर पूर्ण हो सकते हैं।