AFNetworking включает заголовки

Я пытаюсь преобразовать ASIHttpRequest в AFNetworking, но, похоже, у меня возникает ошибка «Использование необъявленного идентификатора AFURLSessionManager» в следующей строке моего класса.

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

Я включил следующее в свой заголовок:

#import "AFNetworking.h"
#import "AFURLSessionManager.h"

Это должно быть что-то действительно очевидное, но прямо сейчас у меня плохой мозговой пердеж.


person Ray Y    schedule 30.09.2013    source источник
comment
как вы импортировали фреймворк? Вы используете CocoaPods?   -  person Gabriele Petronella    schedule 30.09.2013
comment
На самом деле я просто перетащил папку AFNetworking в свой проект, как здесь, mobile.tutsplus .com/tutorials/iphone/ios-sdk_afnetworking   -  person Ray Y    schedule 30.09.2013
comment
...вы загрузили AFNetworking из репозитория или по ссылке на учебном сайте?   -  person lxt    schedule 30.09.2013
comment
Вероятно, что-то не так со связью. Не совсем ответ на вопрос, но серьезно подумайте о переходе на CocoaPods. Это займет у вас 5 минут и сэкономит часы на управлении зависимостями.   -  person Gabriele Petronella    schedule 30.09.2013
comment
Я получил это из git hub   -  person Ray Y    schedule 30.09.2013
comment
Меня очень интересует этот вопрос. Я используюcocopods в новом приложении. Нет проблем с использованием нового AFHTTPRequestOperationManager, но у меня та же ошибка, что и у @RayY при использовании AFURLSessionManager   -  person Chamara Paul    schedule 30.09.2013
comment
Я не уверен, что это ошибка в копии AFNetworking на GitHub здесь: github.com/AFNetworking/AFNetworking Я думал, что это будет замена ASIHttpRequest, но, похоже, сначала нужно выполнить некоторые глубокие настройки.   -  person Ray Y    schedule 30.09.2013
comment
@ChamaraPaul Ваш проект поддерживает iOS 6? В этом случае AFURLSessionManager не устанавливается автоматически.   -  person David Snabel-Caunt    schedule 30.09.2013
comment
Ах да, @DavidCaunt, цель моего развертывания — 6.1...   -  person Chamara Paul    schedule 30.09.2013
comment
Я пытался использовать Cocoapods с моим приложением и использовал файл xcworkspace, чтобы открыть свой проект, теперь, когда я компилирую, я получаю файл AFNetworking/AFNetworking.h, который не найден. Нужно ли добавлять поды в пути поиска заголовков или что-то в этом роде?   -  person Ray Y    schedule 01.10.2013


Ответы (1)


Поведение просто объясняется этой строкой кода в AFURLSessionManager.h.

#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090)

AFURLSessionManager использует NSURLSession, который доступен начиная с iOS 7 (и OSX 10.9).

Если вы ориентируетесь на iOS 6, AFURLSessionManager просто нельзя использовать, и он удаляется во время компиляции. Вот почему вы получаете ошибку.

Установка iOS 7 в качестве минимальной цели развертывания устранит ошибку компиляции, даже если она может не соответствовать вашим потребностям.


Тем не менее, я предлагаю использовать CocoaPods для управления сторонними зависимостями, такими как AFNetworking.

AFNetworking 2.0 — это модульная структура, что означает, что вы можете выбирать, какие модули использовать в соответствии с вашими потребностями. Ядро поддерживает iOS 6, но некоторые модули поддерживают только iOS 7, например модуль NSURLSession, которому принадлежит AFURLSessionManager.

Модульность достигается за счет использования подспецификаций CocoaPods. Чтобы импортировать AFNetworking и модуль NSURLSession, вам просто нужно сделать что-то вроде

platform :ios, '7.0'

pod 'AFNetworking',              '~> 2.0'
pod 'AFNetworking/NSURLSession', '~> 2.0'

Вы по-прежнему можете ориентироваться на iOS 6, но вы не получите несовместимые подмодули, как указано в документации CocoaPods.

Подспецификация может ограничивать платформу родительской спецификации. В этом случае он будет унаследован родительской спецификацией, только если цель подфайла поддерживает его.

person Gabriele Petronella    schedule 30.09.2013
comment
Исправлено, я использовалcocopods для установки AFNetworking, затем мне пришлось добавить ${PODS_ROOT}/BuildHeaders в мои пути поиска заголовков в настройках сборки. - person Ray Y; 01.10.2013
comment
на самом деле, если вы используете Cocoapods, он автоматически создает рабочее пространство. Просто откройте рабочее пространство и используйте его вместо проекта. - person Gabriele Petronella; 01.10.2013