【问题标题】:XCode compiler warning: 'class' may not respond to 'method'XCode 编译器警告:“类”可能不响应“方法”
【发布时间】:2011-07-21 16:15:45
【问题描述】:

我正在尝试消除不断弹出的某个警告。

这是我的 WordListTableViewController.m 的一部分

#import "WordListTableViewController.h"
#import "XMLReader.h"
@implementation WordListTableViewController

- (void)viewDidLoad
{
    [superviewDidLoad];
    NSDictionary *status = [_mainDictionary retrieveForPath:@"Dealers"];
}

@end

XMLReader.h 文件:

#import <Foundation/Foundation.h>
@interface XMLReader : NSObject <NSXMLParserDelegate]] >
{
    NSMutableArray *dictionaryStack;
    NSMutableString *textInProgress;
    NSError **errorPointer;
}
+ (NSMutableDictionary *)dictionaryForPath:(NSString *)path error:(NSError **)errorPointer;
+ (NSMutableDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)errorPointer;
+ (NSMutableDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)errorPointer;
@end

@interface NSMutableDictionary (XMLReaderNavigation)
- (id)retrieveForPath:(NSString *)navPath;
@end    

我得到的警告是:

警告:语义问题:“NSDictionary”可能无法响应“retrieveForPath:”

它实际上响应很好,但我不知道如何组织我的头文件,以便编译器知道什么会响应......

非常感谢您对此的帮助:)

【问题讨论】:

    标签: objective-c ios xcode


    【解决方案1】:

    嗯,您的类别 NSMutableDictionary (XMLReaderNavigation) 已添加到 NSMutableDictionary,而不是 NSDictionary。事实上,在运行时,方法 确实 存在于您实际分配的对象上,因此它被成功调用。但从编译器的角度来看,NSDictionary 实际上并不响应 retrieveForPath 方法。

    【讨论】:

    • 天哪,真尴尬 :D 谢谢!
    • 哈!我在这个发展“事情”中的所有“尴尬”时刻都会写满一本书!祝你好运!
    • 有趣的是,由于巧合,它会在运行时工作;您的应用程序中永远不会有 NSDictionary 或 NSMutableDictionary 的实例。两者都有一个子类,它们都被实例化了,并且实例被适当地配置了。
    【解决方案2】:

    答案很简单,您提供的类别扩展了 NSMutableDictionary,而您发送消息的对象是 NSDictionary 类的实例。

    【讨论】:

      【解决方案3】:

      只需要为您的 WordListTableViewController.m 导入您的类别

      #import "NSMutableDictionary+XMLReaderNavigation.h";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 2011-05-16
        相关资源
        最近更新 更多