这是一个奇怪的。我有一个名为TileMap
的类,其中包含以下接口:
@interface TileMap : NSObject
{
int *data;
int tilesWide;
int tilesHigh;
NSString *imageName;
}
+ (id)mapNamed:(NSString *)filename;
- (id)initWithFile:(NSString *)filename;
@end
实现如下:
@implementation TileMap
+ (id)mapNamed:(NSString *)filename
{
return [[self alloc] initWithFile:filename];
}
- (id)initWithFile:(NSString *)filename
{
if (self = [super init])
{
// ...
}
return self;
}
@end
但是当我向我的应用程序添加对[TileMap mapNamed:@"map.plist"];
的调用时,Xcode警告:
'TileMap'可能无法响应'+ mapNamed:'
应用程序编译正常,并记录NSLog
内TileMap-initWithFile:
的调用。我注意到Xcode的语法着色对于这个类和方法是关闭的,所以我尝试分别重命名类和方法。消除警告和语法着色问题的唯一组合是重命名类和方法。
我是否与一些未记录的框架类或方法发生冲突?在文档中查找不会透露任何内容。在Project中查找仅显示调用,接口定义和实现。我很难过(不是很需要)。有没有办法解决这个问题而不重复我现有的命名约定?
答案 0 :(得分:5)
你有#import
TileMap.h标题吗?你保存了TileMap.h标题吗?
答案 1 :(得分:2)
原来我的项目目录最后有两个TileMap.h和TileMap.m文件 - 从Finder可见而不是在Xcode中。一,完整的接口和实现,在我的根项目目录中。另一个只是我的框架子目录中的一个裸NSObject子类。不确定是怎么回事。删除后者解决了这个问题。感谢Dave的帮助。
答案 2 :(得分:1)
肖恩,
除了您询问的问题外,+mapNamed:
还有内存泄漏。以下行返回一个非自动释放的对象,其保留计数为+1,基本上为调用者提供所有权:
return [[self alloc] initWithFile:filename];
根据Memory Management Programming Guide for Cocoa,您应该从便捷方法返回自动释放的对象,例如:
return [[[self alloc] initWithFile:filename] autorelease];
如果您有Snow Leopard和Xcode 3.2,您可能需要尝试运行静态分析器以通过按Cmd + Shift + A来查找此错误。