【问题标题】:Xcode4: with categories: ... Class method ... not found (return type defaults to 'id')Xcode4:带有类别:...类方法...未找到(返回类型默认为'id')
【发布时间】:2012-05-29 14:42:06
【问题描述】:

对于与objective-c 类别相关的明显错误的情况,我不断得到这个。

注意:这工作正常,然后一夜之间停止工作。

就好像 Xcode 的“读取文件系统”的能力从根本上被破坏了,这让我发疯了。任何关于如何强制它...读取文件系统的想法......将不胜感激。

例如:

  1. 启动 Xcode,编写文件,导入文件,使用 Xcode 自动完成。
  2. cmd-点击导入行,跳转到头文件
  3. 几个构建之后,Xcode 标记一个警告:,例如"找不到类方法'+stringFromCGPath:'(返回类型默认为'id')"
  4. 现在,当您在导入行上单击 cmd 时,Xcode 会弹出一个对话框“未找到符号”(世界上最糟糕的对话框?甚至没有确认,它会闪烁并消失)
  5. 如果您运行该应用程序,它会在该行崩溃,说选择器无法识别

那么,证明FUBAR Xcode是如何的:

  1. 退出 Xcode,重新启动
  2. Cmd-click 再次起作用
  3. ...但是警告仍然存在,应用程序仍然崩溃
  4. 几秒钟后,cmd-click 停止工作

注意:我检查过的东西:

  1. 文件在项目文件夹中?是的
  2. .m 文件包含在目标中?是的
  3. .m 文件是否在要编译的文件列表中?是的
  4. 进行清洁...然后构建?是的

更新:我正在尝试导入的示例标头 - 我已经成功导入了几个月,并且在数百个版本中运行良好,并且我没有更改(使用 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


【解决方案1】:

听起来好像您的索引器可能有问题。您的项目中有多个目标,或者工作区中有多个项目吗?如果是这样,请确保它们全部完全干净地构建 - 索引一个目标的失败可能会扰乱另一个目标的代码完成。

您也可以尝试删除项目的 DerivedData 文件夹

【讨论】:

  • 对不起,我应该更具体一点:不,只有一个目标,只有一个项目,我尝试删除所有构建文件夹。没有骰子:(
猜你喜欢
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多