gpt4 book ai didi

Objective-C 类别不被识别?

转载 作者:行者123 更新时间:2023-12-03 16:52:38 26 4
gpt4 key购买 nike

嗯,这是一个很奇怪的问题。 (我只是希望这与我暂时不玩 cocoa 有关,否则......)

所以,问题非常简单:

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

[NSProgressIndicator start]: unrecognized selector sent to instance 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

有什么想法吗?

最佳答案

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

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

关于Objective-C 类别不被识别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com