Xcode में एक क्लास का नाम बदलें: रिफैक्टर ... ग्रे आउट (अक्षम) है। क्यों?


112

क्यों है रिफैक्टर ... एक्सकोड में धूसर हो गया (अक्षम)?

मैं एक वर्ग का नाम बदलना चाहूंगा।

जवाबों:


181

अपनी हेडर फ़ाइल में क्लास का सिंबल चुनें - यानी थोड़ी देर बाद @interface। फिर रिफैक्टिंग सामान को सक्षम किया जाना चाहिए।


मेरी कक्षा की हेडर फ़ाइल में केवल @interface, no @class है। लेकिन @interface के बाद प्रतीक का चयन करना काम करने लगता है।
इलियट

3
@ आगे की घोषणाओं के लिए अगर… s
जोनाथन स्टर्लिंग

यह मुझे काफी समय से परेशान कर रहा है। धन्यवाद!
योनातन हेडबॉर्ग

यहां तक ​​कि यह एक्सकोड 4 में रिफैक्टिंग को सक्षम नहीं करता है। मैं निराश हो रहा हूं, क्यों सेब अपनी रिफैक्टिंग चीजों में सुधार नहीं करता है। चीजों को कैसे करना है, इसका पालन करने के लिए ग्रहण है!
करीम

@ करीम - यह एक्सकोड में कभी काम नहीं किया है, हर बार काम करने वाले वर्कअराउंड के लिए नीचे मेरा जवाब देखें
एडम

26

यदि आप ऑब्जेक्टिव-सी ++ (यानी सी-कोड के साथ ऑब्जेक्टिव-सी का उपयोग कर रहे हैं) तो रीकोडिंग को एक्सकोड में अक्षम कर दिया जाता है क्योंकि यह सी ++ कोड के रीफैक्टरिंग का समर्थन नहीं करता है।


बहुत दुख की बात है, लगभग 2 साल बाद और यह अभी भी ऑब्जेक्टिव-सी ऑब्जेक्ट को रिफ्लेक्टर नहीं करेगा।
क्रिस्टोफरकंटन

@christophercotton लगभग 8 साल बाद प्रयास करें, और यह अभी भी लागू नहीं हुआ है।
एलेक्स

7

यदि प्रभावित फाइलें (इसमें आपकी कक्षा के साथ फ़ाइल की संभावना है) को सहेजा नहीं गया है, तो रिफलेक्टर भी अक्षम हो सकता है।


1
इंटरफ़ेस बिल्डर में एक xib फ़ाइल को सहेजना मेरे लिए फिर से सक्रिय करने में सक्षम है, जब Xcode को रीलेन्च करना भी मदद नहीं कर रहा था, धन्यवाद!
विंसेंट गेबल

1
इसके लिए +1। XCode के कुछ कोनों में अभी भी खुरदरे इलाके हैं और यह उनमें से एक है। कभी-कभी यदि बचत करने से रिफैक्टरिंग सक्षम नहीं होती है, तो पुनर्निर्माण होगा।
मेमन

6

मैं अब 5 वर्षों के लिए एक्सकोड का उपयोग कर रहा हूं, और रीफैक्टरिंग ने कभी भी सही तरीके से काम नहीं किया है (यहां तक ​​कि एक्सकोड 4.6 में प्रमुख बग हैं जहां यह आपके स्रोत कोड को भ्रष्ट करेगा!)।

वर्कअराउंड हमेशा रहा है (अभी भी 100% काम करता है, यहां तक ​​कि उन मामलों में भी जहां एप्पल का कोड विफल रहता है)

  1. फ़ाइल के सभी उपयोगों को खोजने के लिए शिफ्ट-कमांड-एफ का उपयोग करें
  2. खोज सेटिंग में "बदलें" चुनें
  3. "सबको बदली करें"
  4. .h फ़ाइल के लिए निम्न कार्य करें, और उन्हें .m फ़ाइल के लिए दोहराएं (यदि आपके पास एक है):
    1. मूल फ़ाइल पर राइट क्लिक करें, और "खोजक में शो" चुनें
    2. फ़ाइल को xcode से हटाएं (पूछे जाने पर "केवल संदर्भ हटाएं" चुनें)
  5. खोजक में .h (और .m का यदि आपके पास एक है) का नाम बदलें
  6. Xcode में, "Product -> (Alt को दबाए रखें) -> क्लीन बिल्ड फोल्डर" चुनें
  7. एक्सकोड छोड़ दें (आप आमतौर पर ऐसा नहीं करने के साथ दूर हो सकते हैं - लेकिन ध्यान दें: एक्सकोड में कुछ अन्य प्रमुख कीड़े हैं जहां यह स्वयं दुर्घटनाग्रस्त हो जाता है यदि आप ऐसा नहीं करते हैं)
  8. फिर से खोलें
  9. ड्रैग / ड्रॉप .h और .m वापस Xcode में
  10. कुछ सेकंड प्रतीक्षा करें (Xcode के कुछ मुख्य तरीके अतुल्यकालिक हैं - यह आपकी परियोजना को दूषित करने की अनुमति देता है)
  11. अंत में, जब ऐसा लगता है कि कुछ भी नहीं किया जा रहा है (और आपकी हार्ड डिस्क कोई शोर नहीं कर रही है): cmd-b को फिर से बनाने के लिए

मेरे पास इस पद्धति के साथ 100% सफलता दर है। मैंने अभी हाल ही में Apple के "रिफ्लेक्टर -> का नाम बदलें" के साथ नवीनतम xcode में रिफैक्टिंग की कोशिश की और यह फिर से विफल हो गया!

(इस बार गलत त्रुटि के साथ: "भाषा को निर्धारित करने में असमर्थ", उन त्रुटि संदेशों में से एक है जहां Apple ने गलत पाठ डाला है)


हां, मैंने हाल ही में (मई 2014) यह कोशिश की और Xcode आधिकारिक "रिफ्लेक्टर" मेनोपॉप्शन अभी भी टूटा हुआ है, यह अभी भी आपके स्रोत कोड को दूषित करता है। मुझे आश्चर्य है कि Apple कर्मचारी इससे परेशान नहीं हैं।
एडम

3

मैं खोजकर्ता पर अपने प्रोजेक्ट के लिए जा रहा हूँ, तब तक फ़ाइलों का नाम बदलने के प्राप्त जानकारी

उसके बाद, xcode -> प्रोजेक्ट नेविगेटर I पर फ़ाइलों को हटा दें।

अंत में, मैं कक्षा पर दाईं ओर क्लिक करता हूं और फ़ाइलों को ... में जोड़ता हूं , और इन फ़ाइलों को फिर से जोड़ता हूं ।

इसने मेरे लिए काम किया।


2

मेरे लिए मुझे एहसास हुआ कि रिफ्लेक्टर अक्षम था क्योंकि मैंने जो Xcode प्रोजेक्ट खोला था, वह बेस SDK को संदर्भित कर रहा था जो गायब था। प्रोजेक्ट सेटिंग संपादित करें और बिल्ड टैब में आपके पास जो भी है उसके लिए बेस एसडीके सेट करें (जैसे मेरे लिए यह आईओएस 4.2 था)। इसने मेरे लिए रिफ्लेक्टर सक्षम किया।


1

इसके अलावा, यह हो सकता है कि आपने फ़ाइल का नाम बदलकर वर्ग के लिए रखा, या तो xcode के बाहर या फ़ाइल नाम पर ctrl क्लिक करके और फिर उसका नाम बदलकर। यदि फ़ाइल नाम वर्ग के नाम के साथ मेल नहीं खाता है तो xcode रिफ्लेक्टर के लिए मना कर देता है।


1

अपनी कक्षा की हेडर फ़ाइल पर जाएं और इस तरह दिखने वाली रेखा को खोजें:

@interface YourClassName

वर्ग चिह्न (जैसे YourClassName) पर राइट क्लिक करें और आपको Refactor -> Rename ... का चयन करने में सक्षम होना चाहिए।

मैं सिर्फ यह कोशिश की और यह Xcode 5 में काम करता है।


0

साथ ही यह समस्या थी। मैं गायब एसडीके को खोजने की कोशिश कर रहा था, फाइलों को सहेज रहा था, और ऊपर बताए अनुसार ऑब्जेक्टिव-सी ++ कोड खोज रहा था, और मेरी मशीन को ठीक करने में लगने वाले एक्सकोड को रीबूट कर रहा था।

अभी भी थोड़ी छोटी लगती है।

BTW, यह XCode 4.0.1 के लिए था


-1

रीफैक्टरिंग कार्य यदि आप पहली बार प्रोजेक्ट नाविक में फ़ाइल का नाम बदलते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.