AFNetworking 包含标头

Posted

技术标签:

【中文标题】AFNetworking 包含标头【英文标题】:AFNetworking include headers 【发布时间】:2013-09-30 17:59:39 【问题描述】:

我正在尝试从 ASIHttpRequest 转换为 AFNetworking,但我似乎在我的课程的下一行出现“使用未声明的标识符 AFURLSessionManager”错误。

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

我在标题中包含以下内容:

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

这一定是很明显的事情,但现在脑子里放了一个坏屁。

【问题讨论】:

你是如何导入框架的?你在使用 CocoaPods 吗? 我实际上只是将 AFNetworking 文件夹拖到我的项目中,就像这里有它一样 mobile.tutsplus.com/tutorials/iphone/ios-sdk_afnetworking ...您是从存储库还是从教程站点上的链接下载 AFNetworking? 链接可能有问题。不能完全解决这个问题,但认真考虑切换到 CocoaPods。这需要您 5 分钟,并且可以为您节省数小时的依赖项管理时间。 @ChamaraPaul 您的项目是否支持 iOS 6?在这种情况下,AFURLSessionManager 不会自动安装 【参考方案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 subspecs 实现的。为了导入 AFNetworkingNSURLSession 模块,您只需要执行类似

的操作
platform :ios, '7.0'

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

您仍然可以以 iOS 6 为目标,但您不会得到不兼容的子模块,如 CocoaPods 文档中所述。

子规范可以限制父规范的平台。在这种情况下,只有当 podfile 的目标支持它时,它才会被父规范继承。

【讨论】:

修复它,我使用 cocoapods 安装 AFNetworking,然后必须在构建设置中将“$PODS_ROOT/BuildHeaders”添加到我的标题搜索路径中。 实际上,如果您使用 cocoapods,它会自动生成一个工作区。只需打开工作区并使用它而不是项目。

以上是关于AFNetworking 包含标头的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 AFNetworking 中的 http 标头选项?

iOS网络访问之使用AFNetworking

AFNetworking:如何知道响应是不是使用缓存? 304 或 200

AFNetworking 2.0:传递标头信息

将自定义标头添加到 AFNetworking,我做错了啥?

AFNetworking 2.0 和请求标头