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

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

14 голосов
/ 15 октября 2011

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

@property (weak) IBOutlet WebView *webView;

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

@synthesize webView=_webView;

Когда я пытаюсь его скомпилировать, он дает сбой и сообщаетme:

ошибка: свойство @synthesize для «слабого» разрешено только в режиме ARC или GC

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

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

[...] -fobjc-arc -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch-Wno-unused-параметр -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-преобразование "-DIBOutlet = атрибут ((iboutlet))" "-DIBOutletCollection (ClassName) = атрибут ((iboutletcollection (ClassName))))""-DIBAction = void) атрибут ((ibaction)" -iquote [...] / Build / Intermediates / [...]. Build / Debug / [...]. Build / [...] - Генерируемый-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.

Ответы [ 9 ]

11 голосов
/ 28 декабря 2012

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

@property (weak) IBOutlet WebView *webView;

и без ARC * 1006.*

@property(unsafe_unretained) IBoulet WebView *webView; 
6 голосов
/ 12 ноября 2011

К вашему сведению: для всех, кто страдает от свойства «@synthesize of'ективный», допускается только ошибка в режиме ARC или GC »:

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

2 голосов
/ 02 июня 2012

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

1 голос
/ 16 октября 2012

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

1 голос
/ 16 октября 2011

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

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

0 голосов
/ 04 июня 2013

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

0 голосов
/ 24 января 2013

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

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

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

Тот же выбранный компилятор, но для этого компилятора предлагаются разные опции.Weird.

0 голосов
/ 11 июля 2012

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

0 голосов
/ 20 января 2012

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

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

...