Xcode: код втрачає забарвлення синтаксису


80

Я виявляю, що в різних ситуаціях код Objective-C у Xcode 3.1 (Leopard) може не отримати належного забарвлення синтаксису після введення або втратити забарвлення, яке він мав.

Це питання не просто "оновлення" новими спеціальними символами - воно також впливає на символи какао-какао.

Іноді CMD-a, щоб виділити весь текст на кодовій сторінці, призведе до того, що забарвлення з’явиться (повторно), іноді подвійне клацання на рядку для його вибору спрацює, іноді мені доводиться / видаляти пробіл у символі, щоб отримати цей символ перефарбувати. Відновлення або закриття / відновлення проекту може працювати, а може і не працювати.

Це відома проблема з Xcode? Для чогось такого надокучливого для мене, я не знаходжу рясних обговорень цього в SO та інших місцях, на які я би очікував.

І чи існує якась команда, щоб змусити перефарбувати глобальний синтаксис?


Також перевірте мою відповідь тут stackoverflow.com/questions/1627033/…
Gajendra K Chauhan

Відповіді:


148

1.) Перейдіть до Проект -> Налаштування збірки -> Шляхи пошуку заголовків

2.) Додайте "$ (SRCROOT) / **"

3.) Закрийте та перезавантажте проект

4.) Перейдіть до Xcode -> Вікно -> Органайзер -> Проекти -> $ YourProject -> Видалити похідні дані

5.) Зачекайте хвилинку, поки XCode не відновить всі індикатори


Щоб отримати більше інформації, активуйте детальний журнал:

1.) Підвищення рівня журналу Xcode у програмі Terminal: за замовчуванням пишіть com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3

2.) Відкрийте програму Console. Шукати "xcode"

3.) Я побачив помилки "файл не знайдений" для файлів заголовків, згаданих у файлі pch (тому виправлення вище)


2
друга частина Вашої відповіді була дуже корисною !!
Денис Михайлов

2
Мій досвід роботи в лабораторіях WWDC цього року був, якщо ви хочете, щоб підсвічування синтаксису працювало, повністю вимкнув попередню компіляцію ... це спрацювало для мене, але, здається, це неадекватне виправлення
Stew

Дякую, @Lars schneider. це хороший спосіб.
Tirth

2
Дуже дякую! №4 (видалення похідних даних) працював і у мене.
Марк Маккелві,

1
Це спрацювало для мене в Xcode 8.3, тоді як інше рішення, яке раніше працювало під 8.2, перестало відновлювати підсвічування синтаксису. Чудова, позачасова відповідь!
Адріан

43

У мене була та ж проблема з проектом, який був чудовим у Xcode 3 і для якого виділення синтаксису та завершення коду порушили Xcode 4. Мені знадобилася більша половина дня, щоб зрозуміти це, але я виявив, що наступні кроки відтворити / виправити проблему на 100% для мене.

Спробувавши всі вищезазначені рішення безрезультатно, я спробував створити проект з нуля та ретельно імпортувати кожен файл і папку. Кожного разу, коли я імпортував пару файлів, я перевіряв, і підсвічування синтаксису все ще працювало. Навіть після кількох останніх з них це все одно сталося. Потім я вдарився до збірки, яка не вдалася, тому що я забув включити пару загальних файлів заголовків у файл .pch проекту, які були у старому проекті. І саме тоді CodeSense знову зламався.

Після подальшого розслідування ми виявили, що якщо ви імпортуєте файл заголовка, який, в свою чергу, імпортує той самий файл заголовка, що вже робить .pch, тоді CodeSense зламається. Те саме налаштування не викликало жодних проблем у Xcode 3.

Приклад:

project.pch

#import <Foundation/Foundation.h>
#import "projectConfig.h"

projectConfig.h

#import <Foundation/Foundation.h>
#import "one.h"
#import "two.h"

Отже, видаливши цілком непотрібне

#import <Foundation/Foundation.h>

Директивою з 'projectConfig.h' ви можете виправити виділення, і завершення коду також повернеться до вас. Якщо ваша проблема така ж, як і моя.


так ... просто була та сама проблема ... і рішення від гніву це виправило.
крос-код

4
Чому це не проголосовано у стратосфері? Я не турбувався очищенням усіх своїх проблем із заголовками, а натомість просто вимкнув опцію Precompile Prefix Header для моєї цілі, і все добре. Нарешті, я можу отримати всю команду оновлення до 4.2, оскільки саме тут ми зламали.
Роб Бут,

2
Це працює! Я зробив те саме, що і @Rob Booth, я вимкнув "Прекомпілювати заголовок префіксу" (встановив значення НІ), очистив свій проект і видалив отримані дані. Мій підсвічування синтаксису перезапущено для роботи!
hbobenicio

це виправило мою проблему. Мій - це не файл Foundation, а власний клас. Я просто видалив його з файлу .pch, потім перечитав і видалив усі його екземпляри в інших файлах мого класу.
Бот

Ви маєте мою подяку. :) Я точно дотримувався вашого опису. Видалено Foundation та UIKit із усіх файлів, які я імпортував у свій .PCH.
Тимо

16

Просто виберіть файл, який втратив забарвлення синтаксису, натисніть Редактор> Розмальовка синтаксису> (виберіть свою мову (Objective c ++ for ex) замість "Default"


2
Це сталося зі мною. Не знаю, чому XCode за замовчуванням використовував би загальний, а не правильний тип файлу, лише для одного файлу, але цей крок вирішив. Я спробував спочатку очистити та видалити похідні дані, які, як я вважав, були винуватцем.
Руді

ура ... яблуко відбирало для мене AppleScript, хай дякую, товариш
Бікрам Тапа

7

Я знайшов найкращий спосіб відновити забарвлення синтаксису - це просто вийти з Xcode і повторно запустити його. Я не міг сказати вам, чому, але це працює щоразу.


1
Для мене навіть було достатньо відкрити проект.
thgc

Як це божевільно! Це не тільки зафіксувало виділення категорії, яка раніше не працювала, але також почало працювати
Джудіо

4

Я вважаю, що наступні часто зроблять трюк ...

"Повторно виберіть" і "Базовий SDK", і "Архітектура" - у "Налаштування побудови". (Клацніть на синій піктограму проекту вгорі ліворуч, перебуваючи в "режимі браузера", ака1 , потім клацніть на налаштування проекту і возитися з матеріалами там.

Переконайтесь, що всі вони вишикуються в лінію / не завадить трохи потурбуватися там, поки ви там… Я знаю, просто трохи змішайте. Ви помітите, що xCode має маленький мініатюрний міні-штрих - кожного разу, коли ви перемикаєтесь між 64 і 32 бітами ... Зазвичай це відбувається тоді, коли я знаю, чи виділення коду мертве на ніч, чи я вже готовий.

Часто у мене буде проект, який миттєво виділяється в 32-розрядному режимі, а просто сидить там у 64 ... Хто знає .. Ааа, Xcode, ти дурна блядь.


1
Відповідь мені дуже допомогла і працювала ... Але ваш стиль написання можна вдосконалити :)
ItalyPaleAle

Так, у ретроспективі така відповідь дійсно може бути незрозумілою для будь-кого, хто не володіє англійською мовою. На жаль, для мене ... це hillairballs .
Alex Gray

3

Виберіть свій проект -> вкладка Налаштування збірки -> Мова Apple LLVM 5.0 -> Прекомпілювати заголовок префіксу до YES. NSLog не виділяв. На даний момент працює Xcode 5.0.1 Сподіваюся, це допоможе =) Дякую @rebelzach


2

Я можу підтвердити 100% виправлення цієї проблеми на основі запитання, яке я задав (і насправді відповів), як показано нижче. Одне, що я додам, це те, що іноді саме "помилкові пробіли" можуть також сприяти втраті виділення. Або почистіть це самостійно, або скористайтеся плагіном Goggle Toolbox для Mac Xcode 4, який додає запис у Editменю XCode, який називається Clean Up Whitespace.

введіть тут опис зображення введіть тут опис зображення


2

Здається, це подібна помилка з цього питання

Я зміг виправити цю проблему, встановивши Precompile Prefix Headerзначення Noв налаштуваннях збірки.


1

Нещодавно у мене була подібна проблема, всі кольори та автозаповнення перестали працювати для вбудованих фреймворків, мої власні класи все ще працювали. Хтось порекомендував мені вимкнути "Запустити статичний аналізатор" у налаштуваннях збірки. Це дивно, але це спрацювало.


1

Для мене це було те, що я перейменував свій проект і Тести ціль все ще вказувала на старе місце розташування pch, але моя ціль програми вказувала на нове.

Якщо ваш делегат програми все ще має сенс коду, це може бути і для вас. Перейдіть до проекту, виберіть "префікс" цільового пошуку "Тести" та встановіть для нього еквівалентне значення в цілі "app".


0

Відкрийте налаштування проекту ( Проект> меню Редагувати параметри проекту ), а потім натисніть кнопку Відновити індекс коду сенсу на вкладці Загальне . Це створить індекс, який Xcode використовує для забарвлення синтаксису.

Цей процес може зайняти деякий час для великих проектів, тому ви можете перевірити прогрес у вікні Діяльність ( Вікно> Меню Діяльність ).


2
Час від часу це не вирішує проблему для мене. Напевно, я роблю щось неправильно, оскільки XCode просто не турбується виділенням синтаксису або відображенням автоматичного завершення.
Jessedc

1
Будь ласка, переконайтеся, що ви реєструєте помилки щодо Apple щодо таких проблем: bugreport.apple.com.
Ліндсі Фергюсон

0

Більше того, в XCode4 немає кнопки для відновлення індексу сенсу коду.


Я десь читав, що це, мабуть, тому, що XCode4 більше не потребує індексу сенсу коду. Я думаю, що він використовує новий синтаксичний аналіз Clang безпосередньо замість того, щоб зберігати окремий індекс. Ось чому пропозиції коду набагато точніші, оскільки вони пропонують лише доповнення коду, які мають сенс з точки зору компілятора.
markquezada

1
Виявляється, є спосіб - stackoverflow.com/questions/1627033 / ...
Arkaaito

0

У мене була та сама проблема, і я вирішив це, оновивши налаштування збірки, щоб використовувати компілятор за замовчуванням системи, LLVM GCC 4.2.

Здається, існує безліч факторів.


0

Я також відчуваю цю проблему і спробував рішення або "відновити індекс", "перезапустити XCode", "змінити налаштування компілятора на LLVM GCC 4.2". Ті мені не допомогли.

Тому я спробував додати наступний код одразу разом зі свіжим створенням заголовного файлу.

#include "header.h"

using namespace cocos2d

Потім код, доданий раніше у файлі заголовка, забарвлюється, і він може розпізнавати класи та інше.

Я використовував cocos2d-x, тому мій синтаксис базується на c ++. Я поки що не перевіряю це за допомогою Objective-c.


0

Бо хтось ще не знає чому. Нехай відкривається з XCode 8.2 , він повинен працювати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.