objective-c - 未找到 Objective-C 头文件 (AFNetworking.h)
问题描述
#import <AFNetworking/AFNetworking.h>
我将 AFNetworking.h 文件导入到 .m 文件,但出现如下错误:
找不到“AFNetworking/AFNetworking.h”文件
我删除了 pods 文件夹和 Podfile.lock,并重新安装了 Podfile 但没有解决。我应该怎么办?(我打开了工作区文件。)
解决方案
链接!==复制。
有C风格#include ...
和Objective-C风格#import ...
两者的工作方式几乎相同..
其中#import读取标题但如果完成一次则不再包含。因为这有时会失败并且确实会失败(通常是因为在不同的方言中混合了 C、C++、Objc、Objc++),我们经常使用#define
规则来确保所包含的代码被确定读取一次而不是再次读取,这反过来也适用于包含代码时并用#include声明。它将被包含但不会编译两次。
#ifndef SOME_HumanReadableFlag_h
#define SOME_HumanReadableFlag_h
// ... your header code here..
@interface XyzObject : FromInheritedClass
@end
#endif
现在为什么重要?
从其他类的角度来看,包含头文件内容的#define 规则可能会隐藏头文件。当类没有正确编写并考虑到最终开发人员的结构时,这种情况经常发生。它可能适用于开发人员的工作台,但不适用于其他实施它的人。
你的错误清楚地告诉“ File not found ..
”
所以首先看看导入/包含规则的一般区别
#import <LibFrameworkName/LibFrameworkName.h>
意味着您必须链接框架或库,即使您在该项目中自己开发了一个。该规则与您的项目相关,LibFrameworkName 是一个框架/库。
如果在某处找到#include <LibFrameworkName/LibFrameworkName.h>是不正确的,除非您想以 c 样式将此框架标头包含到您的二进制文件标头中,2) 告诉您一些原因..#import "LibFrameworkName/LibFrameworkName.h"
意味着您必须将此标头复制/提供到您的项目中,并使用名称为 LibFrameworkName 的子文件夹。一旦在某个地方正确声明,Xcode 可能会找到并应用标头,即使稍后在该特定类中使用错误的规则声明,您也应该在 IDE 中收到警告。在 AFNetworking 的情况下,您不想将系统 SDK 框架复制到您的项目中,也不要复制到第三方框架中,除非您知道自己在做什么。此规则与项目结构中的文件位置相关,这意味着它会尝试在带有此规则的文件下方查找名称为LibFrameworkName的某个文件夹。
它说什么:因为框架没有链接,编译器会尝试使用给定的名称来查找它,而忽略<
&>
就好像它在哪里一样 2) 具有该文件夹名称的文件,然后将找不到它并引发错误或警告。
为了强制预编译器解析某些特定文件夹,我们有时会使用标题搜索路径来明确告诉在哪里找到它。被广泛使用并且最麻烦,因为它还向开发人员隐藏了错误定义的规则,因为 Xcode 会跳过代码中仍然存在的错误导入规则,假设它已经知道这个头文件。或者它会在一切正常时发出警告。其他开发人员会遇到麻烦,文件结构和标题列表根本不匹配。所以请记住,当您可以避免使用标头搜索路径列表时,请使用它。它也将并且不应该解决您的问题。
'<AFNetworking/AFNetworking.h>' File not found
表示您的项目不知道框架模块。此标头是框架的一部分。
解决方案:您必须转到Projects Settings并向下滚动到Frameworks and Libraries,点击此列表下方的 [+]。它应该打开对话框,显示您选择的项目目标中的所有 SDK 以及您自己项目的所有已知 Pod 或已知框架,当您开发一些时。按名称搜索框架或库,单击它,点击“添加”.. 完成..
从那里开始 - 有一些选项可以习惯它。
因为链接并不意味着默认情况下在编译时复制到您的资源中。通常 Xcode 知道它不必将系统 SDK 复制到项目框架文件夹中,所有 macUsers 都在他们的系统上预先安装了正确版本的框架。${SOMEFLAGWHEREEVERTHISPOINTSTO}/AFNetworking/AFNetworking.framework/Headers
除非有人想推翻系统,否则链接到某些特定文件夹实际上是错误的框架头文件,也可能是二进制文件。
因此AFNetworking
不应出现在Build Phases > Copy Bundle Ressources列表下,但在完成上述过程后,它将出现在Link Binary with Libraries下,当 Xcode 需要了解某些库/框架时,它也可能被放置在Dependencies中,它必须有这个编译。最后提到的选项是因为当某些框架丢失或不可用时,您可以拥有一个在运行时适应的框架。所以这个条目帮助 Xcode 弄清楚它必须以哪种排序方式编译你的东西。
${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers
我猜在Header Search Paths中发现一定有问题..因为框架很可能没有复制到 Pods 文件夹中。它应该与 Xcode 附带的 SDKs 文件夹相关。上面提到的链接过程应该可以解决这个问题,然后您可以从标题搜索路径中删除该条目。
推荐阅读
- python - 替换字符串并忽略大小写 Python
- elasticsearch - ElasticSearch 简单查询
- rust - 将东西(移动)放入结构中会产生生命周期错误
- python - pysftp 连接未找到主机密钥错误
- java - 使用堆栈将零移动到末尾
- react-native - 问题重命名现有的世博会应用程序
- sql - 如何在 C# & ASP.NET MVC 的文本区域中插入特殊字符?
- azure - 在仪表板上显示正在运行的 Azure VM 的数量
- php - 使用 != 选择多个条目的 PHP SQL 查询
- c# - 如何编写一个 CompareTo 方法来比较二进制搜索算法中的字符串值