'TileMap'可能无法响应'+ mapNamed:'

时间:2009-12-08 17:30:48

标签: objective-c iphone xcode

这是一个奇怪的。我有一个名为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:'

应用程序编译正常,并记录NSLogTileMap-initWithFile:的调用。我注意到Xcode的语法着色对于这个类和方法是关闭的,所以我尝试分别重命名类和方法。消除警告和语法着色问题的唯一组合是重命名类和方法。

我是否与一些未记录的框架类或方法发生冲突?在文档中查找不会透露任何内容。在Project中查找仅显示调用,接口定义和实现。我很难过(不是很需要)。有没有办法解决这个问题而不重复我现有的命名约定?

3 个答案:

答案 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来查找此错误。