Подтвердить что ты не робот

ARC и слабые свойства IBOutlet

Я только что обновил проект, чтобы использовать ARC с встроенным инструментом преобразования Xcode 4.2. К сожалению, появляется странная ошибка, я не понимаю и ничего не нашел. У меня есть класс документа с объявлением свойства:

@property (weak) IBOutlet WebView *webView;

В файле реализации у меня есть оператор @synthesize:

@synthesize webView=_webView;

Когда я пытаюсь скомпилировать его, он терпит неудачу и говорит мне:

error: @synthesize свойства 'weak' разрешено только в ARC или GC Режим

Конечно, проект помечен для компиляции с ARC. Я был бы очень признателен за любую помощь, чтобы понять, что я делаю неправильно и почему.

Изменить: вчера был поздно. Итак, вот более полный журнал компиляции:

[...] -fobjc-arc -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -Wshorten -64-to-32 -DDEBUG = 1 -isysroot/Developer/SDKs/MacOSX10.7.sdk -fasm-blocks -mmacosx-version-min = 10.7 -gdwarf-2 -Wno-sign-conversion "-DIBOutlet = атрибут ((iboutlet))" "-DIBOutletCollection (ClassName) = атрибут ((iboutletcollection (ClassName)))" "-DIBAction = void) атрибут ((ibaction)" -iquote [...]/Build/Intermediates/[...]. build/Debug/[...]. build/[...]- generated-files.hmap -I [...]/Build/Intermediates/[...]. Build/Debug/[...]. Build/[...]- own-target-headers.hmap -I [...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-all-target-headers.hmap -iquote [...]/Build/Intermediates/[...]. build/Debug/[...]. build/[...]- project-headers.hmap -I [...]/Build/Products/Debug/include -I [...]/Build/Intermediates/[...]. build/Debug/[...]. build/DerivedSources/x86_64 -I [...]/Build/Intermediates/[...]. Build/Debug/[...]. Build/DerivedSources -F [...]/Build/Products/Debug -fno-objc-arc [...]

Кажется, что параметры компилятора для ARC включены в начале и снова выключены позже в списке аргументов. Честно говоря: я не знаю, где можно удалить такие странные настройки и как это получилось. Единственное решение, которое я придумал сейчас, - это запустить полный проект из пустого и нового и импортировать все файлы классов с нуля.

Если кто-то знает более простой способ, я был бы очень признателен.

PS: У меня есть все настройки сборки, связанные с настройкой ARC на YES.

4b9b3361

Ответ 1

Я взял еще немного времени и сделал новое преобразование из предыдущего коммита проекта. На этот раз все прошло хорошо. Я предполагаю, что эта ошибка возникла из меня, пытаясь сделать преобразование в 2 отдельных шага. Проект разбит на 2 компонента. Я хотел их преобразовать отдельно. Вот почему я не выбрал все файлы во время первого запуска преобразования. К моему удивлению, первое обращение происходило очень безболезненно и в более короткие сроки, чем я ожидал. Поэтому я решил преобразовать второй компонент проекта. То, что я закончил, было состояние проекта, описанное как проблема выше: конфликтующие настройки сборки.

Хорошим советом может быть не пытаться преобразовать проект поэтапно, а взять еще пару раз и сделать это сразу. Я должен предположить: функция преобразования Xcode может не предназначаться для такой процедуры.

Ответ 2

В только ARC мы должны использовать свойство weak, и без ARC мы должны использовать unsafe_unretained, это то же самое средство для ARC мы должны использовать

@property (weak) IBOutlet WebView *webView;

и без ARC

@property(unsafe_unretained) IBoulet WebView *webView; 

Ответ 3

FYI: для всех, кого преследует "@synthesize" слабого "свойства, разрешается только в режиме ARC или GC":

Если вы пробовали все решения, предлагаемые в этом потоке, и он все равно не будет создан, попробуйте закрыть проект Xcode (Файл > Закрыть проект), затем повторно открыть проект и попытаться создать еще раз.

Ответ 4

Для всех, кто работает в этом случае, если вы преобразовали свой проект в части в ARC, убедитесь, что в файлах, на которые он жалуется, нет флага -no-obj-arc.

Ответ 5

Попробуйте явно указывать с помощью -fobjc-arc в качестве флагов компилятора в фазах сборки

Ответ 6

В случае, если кто-то еще наткнется на это:

Я просто исправил эту проблему, установив "Objective-C Garbage Collection" в "Unsupported" в настройках сборки. По какой-то причине это было установлено в YES, и это привело к тому, что сборка ARC не работала.

Ответ 7

Хорошо, на всякий случай у кого-то есть такая же проблема, как и я, я добавлял элементы пользовательского интерфейса как свойства ниже закрывающего "}" моего @interface, а не изнутри. Как только я удалил записи @property и @synthesize в файлах .h/.m и повторно связал элементы пользовательского интерфейса в разделе @interface {}, он сработал.

Ответ 8

В моем случае я обнаружил, что изменение настройки сборки "Компилятор для C/С++/ Objective-C" в категории "Параметры сборки" по умолчанию ( "Apple LLVM compiler 3.0" ) разрешило эту проблему.

Он был установлен в "LLVM GCC 4.2", а далее в категории "... complier 3.0 - Language" опция выбора ARC ( "Objective-C Автоматический подсчет ссылок" ) была даже не видна.

Это было особенно странно, потому что у меня есть другой проект, ранее преобразованный в ARC, и хотя выбранный компилятор был также "LLVM GCC 4.2", тем не менее категория "Язык" по-прежнему называлась "Apple LLVM compiler 3.0", а опция выберите ARC.

Выбран один и тот же компилятор, но для него есть разные варианты. Weird.

Ответ 9

Я также столкнулся с той же проблемой. Ошибка, которую я совершил, заключалась в том, что в Build Phases- > Compile Sources я устанавливаю флаг файла без ARC как "-fno-objc-arc". Я хотел, чтобы он был добавлен в файл без ARC. Я удалил его, и он начал работать правильно.