1

嗯,这是一个很奇怪的问题。(我只是希望这与我有一段时间没有玩那么多可可有关,否则......)

所以,这个问题很简单:

  • 我正在使用Xcode 4.3.3(一个非常简单的测试项目 - 10.7 SDK -没有 ARC
  • 我正在某个类上创建一个类别(例如NSProgressIndicator
  • 我包括适当的头文件
  • 当尝试使用我的任何类别的方法时(但是,它仍然显示在可用命令的下拉列表中),我收到一个错误:

[NSProgressIndicator start]:无法识别的选择器发送到实例 0x7f9f4b91a0a0

编码

(例如 - 它发生在其他(100 次测试)类别中):

#import <Foundation/Foundation.h>


@interface NSProgressIndicator (NSProgressIndicator_Functions)

- (void)start;
- (void)stop;

@end

#import "NSProgressIndicator+Functions.h"


@implementation NSProgressIndicator (NSProgressIndicator_Functions)

- (void)start
{
    [self setHidden:NO];
    [self startAnimation:nil];
}

- (void)stop
{
    [self setHidden:YES];
    [self stopAnimation:nil];
}

@end

有任何想法吗?

4

1 回答 1

5

要将我的评论扩展为真正的答案:

确保类别的实现 (.m) 文件包含在目标的编译源构建阶段。导入标头足以告诉编译器 NSProgressIndicator 上有一个添加-start方法的类别。除非类别的实现被实际编译并链接到完成的二进制文件中(或者在运行时添加方法实现等),否则 NSProgressIndicator 不会start在运行时实际响应消息。由于 Objective-C 的动态消息发送行为,编译器无法在编译时判断 NSProgressIndicator 是否真的会响应该消息,这就是您没有收到警告或错误的原因。

于 2012-08-27T14:48:01.123 回答