'__strong' применяется только к объектам типа objective-c или типа блока; введите здесь предупреждение XXX "

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

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

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

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

note 1: я использую ARC

Примечание 2: приложение работает

edit 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

изменить 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)

Ответ 1

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

Ответ 2

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

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

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

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

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

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

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

Я начал подозревать аппаратные сбои или вирус в этот момент, но, к счастью,

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

~/Library/Developer/Xcode/DerivedData​​p >

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

См. также:

Невозможно построить в Xcode 6 - проблемы с ARC в Apple Framework

и

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

В частности:

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

Ответ 3

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