【发布时间】:2012-05-29 14:42:06
【问题描述】:
对于与objective-c 类别相关的明显错误的情况,我不断得到这个。
注意:这工作正常,然后一夜之间停止工作。
就好像 Xcode 的“读取文件系统”的能力从根本上被破坏了,这让我发疯了。任何关于如何强制它...读取文件系统的想法......将不胜感激。
例如:
- 启动 Xcode,编写文件,导入文件,使用 Xcode 自动完成。
- cmd-点击导入行,跳转到头文件
- 几个构建之后,Xcode 标记一个警告:,例如"找不到类方法'+stringFromCGPath:'(返回类型默认为'id')"
- 现在,当您在导入行上单击 cmd 时,Xcode 会弹出一个对话框“未找到符号”(世界上最糟糕的对话框?甚至没有确认,它会闪烁并消失)
- 如果您运行该应用程序,它会在该行崩溃,说选择器无法识别
那么,证明FUBAR Xcode是如何的:
- 退出 Xcode,重新启动
- Cmd-click 再次起作用
- ...但是警告仍然存在,应用程序仍然崩溃
- 几秒钟后,cmd-click 停止工作
注意:我检查过的东西:
- 文件在项目文件夹中?是的
- .m 文件包含在目标中?是的
- .m 文件是否在要编译的文件列表中?是的
- 进行清洁...然后构建?是的
更新:我正在尝试导入的示例标头 - 我已经成功导入了几个月,并且在数百个版本中运行良好,并且我没有更改(使用 SCM 确认):
#import <Foundation/Foundation.h>
#import "CGGeometryExtensions.h"
@interface NSString(CGPath)
+(NSString*) NSStringFromCGPath:(CGPathRef) path;
@end
UPDATE2:实际上,这不会在运行时崩溃——它崩溃是因为在调用“NSStringFromCGPath:”时出现了拼写错误(一个字母是小写的,而它本应该是大写的)。但这很难看到,因为 XCode 声称整个头文件不存在 - 尽管如上所述,IMPORT 行是由 Xcode 自动生成的。
【问题讨论】:
-
请通过bugreport.apple.com 向 Apple 报告此情况,特别是如果您有可重复的测试用例。
-
将其作为 NSString 上的一个类别似乎很奇怪;由于 CG* 是一个函数式 API,我建议创建一组实用函数来执行此操作。 IE。
NSString *MyNSStringFromCGPath();-- 总是使用前缀来防止冲突。 -
@bbum 告诉 Apple :) 他们决定将所有这些类的方法放入 NSString,尽管它 1) 不可扩展(除了这种方式)和 2) 许多开发人员从未发现这些方法存在
标签: objective-c xcode4