XCode import头文件出现这么一个问题

XCode
import头文件出现这么一个问题:
用实例来说明

【环境】
OS X 10.8.2
XCode4.5
Svn版本控制

【Svn目录】
原有目录关系如下:
[Base]---->[Reserve]---->[Game]
            ---->{A.h,A.m,B.h,B.m},其中B.m文件import "A.h"

【应用原有拓展】
由于新项目在原有项目基础上扩展开发,那么新项目保留[Base]---->[Reserve]相关代码
在[Base]平级新增如下目录
[newPrj]---->[Reserve]---->[Game]
            ---->{A.h,A.m,B.h,B.m}
由于A.h,A.m文件在当前项目中的实现与[Base]有差异,且不能应用到[Base]
那么需要新增一个目录,最后效果如下
[newPrj]---->[Reserve]---->[Game]
            ---->{A.h,A.m,B.h,B.m}
        ---->[Extra]  ---->[Game]
            ---->{A.h,A.m}

在xcode中,工程项目如下处理:
1、删除原有[Reserve]---->[Game]中A.h,A.m的引用
2、添加[Extra]  ---->[Game]的A.h,A.m的引用

这个时候点击B.m文件在定位A.h,一直指向[Reserve]---->[Game]中的A.h,而且由于A.h在[Reserve]和[Extra]差异性实现导致一些引用失败从而编译失败
比如:
[Base]:    A.h引用第3方库K.h
[newPrj]:    A.h不用第3方库K.h,且项目也没有引用第3方库
这个时候,编译,一直会让你找K.h,因为:B.m文件在定位A.h,一直指向[Reserve]---->[Game]中的A.h,不是[Extra]  ---->[Game]中的A.h

PS:如果两个目录中A.h都一样就不会存在这类问题。

如何解决这个问题:
1、先进入[Base]项目
新增目录[Header],效果如下
[Base]---->[Reserve]---->[Game]
            ---->{A.h,A.m,B.h,B.m}
      ---->[Reserve]---->[Header]
            ---->{libCommon.h},这个文件有这么一句话#import "A.h"            
            
注意,B.m文件修改成import "libCommon.h"
当然编译成功的,checkin
2、在[newPrj]项目下拉最新,效果如下
[newPrj]---->[Reserve]---->[Game]
            ---->{A.h,A.m,B.h,B.m}
        ---->[Reserve]---->[Header]
            ---->{libCommon.h}
        ---->[Extra]  ---->[Game]
            ---->{A.h,A.m}
[newPrj]项目工程把[Header]引用到项目中,再点击B.m文件在定位A.h,这个时候会定位到[Extra]  ---->[Game]中的A.h

当然,这样也算解决了问题

只是以后的编写上来说,相对复杂了一些

最后,希望XCode编译器能解决这个问题,应该是头文件路径定位的优先级问题

posted @ 2013-04-25 16:52  西就东城  阅读(2913)  评论(1编辑  收藏  举报