修改了代码里一个地方,编译都过不去,Xcode提示如下:
注意,只是链接器报错,但并未定位到实际代码的某一行里!!!
一般来说这个问题往往是因为代码对象.o文件和实际不一致导致,我们需要删除App文件或.o,文件确保其重新生成即可。
但在这里却又不一样…
因为检查.o文件名,并不在一个库中!
仔细查看详细错误信息:
如上,翻译过来就是:
MainTabBarViewController.o里面MainTabBarViewController.setup()方法引用了一个未定义在的符号:__T010LightHabit5ModelC13defaultFolderAA0E0Cfg
怎么会有这么奇怪的符号?这是编译器转换后准备链接的符号名,和C++类似,在编译时符号表是全局的,所以必须用文件、类、方法签名等额外修饰字符确保符号名称的唯一性,所以上面的符号在代码中的名称是:Model类的计算属性defaultFolder.
为什么这里出错了?因为我在代码中在名称后加了一个?号,使其变为Optional类型,方法签名不对,自然链接时找不到名字了。
但是Xcode也有问题,为什么不能定位到MainTabBarViewController.setup()里那句代码呢?如果能够定位到实际代码中的那一行就更好了。
以上问题出现在Xcode 9.2,Xcode 10中未作测试。