«__strong» применяется только к объектным объектам или типам указателей блоков c;типа вот ХХХ "предупреждение - PullRequest
5 голосов
/ 24 февраля 2012

я получаю много предупреждений типа:

'__ strong' применяется только к объектным или блочным указателям типа c;введите здесь ...

предупреждения указывают на заголовки каркаса.например, NSNotification, NSURL, NSIndexset и т. д.

что это такое и как я могу это исправить?

примечание 1: я использую ARC

примечание 2: приложение кажетсяработа

правка 1: предупреждения, похоже, исходят из моего файла pch.это:

//
// Prefix header for all source files of the 'myapp' target in the 'myapp' project
//

#import <Availability.h>

#ifndef __IPHONE_5_0
     #warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

edit 2: пример предупреждения: предупреждение в NSString.h указывает на:

/* Methods to convert NSString to a NULL-terminated cString using the specified encoding.     Note, these are the "new" cString methods, and are not deprecated like the older cString     methods which do not take encoding arguments.
*/
- (__strong const char *)cStringUsingEncoding:(NSStringEncoding)encoding; //"Autoreleased"; NULL return if encoding conversion not possible; for performance reasons, lifetime of this should not be considered longer than the lifetime of the receiving string (if the receiver string is freed, this might go invalid then, before the end of the autorelease scope)

Ответы [ 3 ]

7 голосов
/ 31 октября 2014

Ответ Амира не сработал для меня, но привел меня к аналогичному решению: убедитесь, что у вас также нет пути Frameworks в вашем FRAMEWORK_SEARCH_PATHS в настройках проекта или целевых настройках. У меня был запись, которая выглядела так:

$ (DEVELOPER_DIR) /Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

Симптомом было то, что если я щелкнул по команде Foundation / Foundation.h в моем prefix.ch, а затем щелкнул правой кнопкой мыши на странице-> Показать в Finder, то это было в iPhoneOS.platform. Но то же самое с Availability.h привело меня к платформе iPhoneSimulator.platform.

Таким образом, наличие некоторых файлов, в том числе на каждой платформе, похоже, вызвало __strong предупреждения, а также некоторые ошибки ссылок, в которых говорится, что отсутствует архитектура i386, поэтому Я потерял способность работать в iOS Simulator.

Эта ошибка заняла у меня 2 дня , потому что этот путь был в моих целевых настройках в течение нескольких месяцев, но не вызывал проблем. Что-то о переходе на Xcode 6 показало это, но не сразу, это произошло спонтанно в начале этой недели, когда я обновлял Google AdMob SDK и, возможно, вызвало перестройку кэша.

Особенно коварным было то, что попытка скомпилировать резервные копии моего проекта также не удалась с той же ошибкой.

Позвольте этому на мгновение погрузиться и представьте ощущение надвигающейся гибели.

В тот момент я начал подозревать сбои оборудования или вируса, но, к счастью ..

Ошибка была на уровне Xcode, а не на уровне проекта. Это заставляет меня поверить, что это как-то связано с папками SHARED_PRECOMPS_DIR, CACHE_ROOT или, возможно, / var /, но к тому времени я из-за отчаяния перешел на Yosemite и не смог разнести мой жесткий диск с резервной копией Time Machine, в которой были Mavericks. Оглядываясь назад, вот где я это испортил. Это означало, что мне пришлось попробовать дюжину других потенциальных решений с участием PCH и других кешей, ни один из которых не работал. Также не были удалены каталоги производных данных проекта в:

~ / Library / Developer / Xcode / DerivedData

(что я и сделал на основании этого ответа )

Смотри также:

Не удается встроить в Xcode 6 - проблемы с ARC в каркасах Apple

и

Ошибка сборки - отсутствует необходимая архитектура i386 в файле

В частности:

Ответ Шона Ронельта

3 голосов
/ 15 апреля 2012

кажется, я решил это. по какой-то причине у меня была папка "Framework" с заголовками в локальной папке моего проекта. удаление этой папки и предупреждения исчезли. Я не знаю, как и почему эта папка была создана. (я не создал его).

0 голосов
/ 24 февраля 2012

Это дикая догадка: ваш проект использует gcc? Если это так, попробуйте переключиться на Clang

...