Objective c “无法识别的选择器已发送到实例”,其类继承自NSAttributeString

Objective c “无法识别的选择器已发送到实例”,其类继承自NSAttributeString,objective-c,cocoa,Objective C,Cocoa,我有一个从NSAttributedString继承的类,如下所示: [[Text alloc] initWithString:@"Test" andFont:welcomeLabelFont andLineHeight:52 andLetterSpacing:0.0f]]; 案文h: #import <Foundation/Foundation.h> @interface Text : NSAttributedString -(id) initWithString:(NSStr

我有一个从NSAttributedString继承的类,如下所示:

[[Text alloc] initWithString:@"Test" andFont:welcomeLabelFont andLineHeight:52 andLetterSpacing:0.0f]];
案文h:

#import <Foundation/Foundation.h>

@interface Text : NSAttributedString

-(id) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing;

@end
我得到以下例外情况:

2017-07-17 17:21:15.771610+0300 Test[41403:10128169] -[Text initWithString:attributes:]: unrecognized selector sent to instance 0x600000000f70

选择器在基类中可用,事件ctrl单击它将跳转到NSAttributedText类。有人能指出我做错了什么吗?参数不是零指针,调用似乎是合法的。唯一奇怪的是,错误的类名文本不是NSAttributedString。

如果是子类,请使用扩展名。像这样

// in NSAttributedString+init.h
//
@interface NSAttributedString (Init)

-(instancetype) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing;

@end
然后呢,`

// in NSAttributedString+init.m
//
#import "NSAttributedString+init.h"

@implementation NSAttributedString (Init)

-(instancetype) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing {
    // ...
}

无论您想在何处使用方便的初始值设定项导入该扩展标题。

对于子类,请使用扩展名。像这样

// in NSAttributedString+init.h
//
@interface NSAttributedString (Init)

-(instancetype) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing;

@end
然后呢,`

// in NSAttributedString+init.m
//
#import "NSAttributedString+init.h"

@implementation NSAttributedString (Init)

-(instancetype) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing {
    // ...
}

无论您想在何处使用方便的初始值设定项,都要导入该扩展标题。

NSAttributedString是一个类群集,并且可能不是子类。您希望在子类中实现什么?它可以用一个扩展来近似,也可以完全避免。@danh我想创建一个在内部隐藏属性字典构造的类。来自C++的世界看起来不错,但现在我后悔了。什么标记类是不可派生的?为什么我可以继承它呢?请看这里关于集群的内容。你可以通过扩展来实现你的目标。我将在Xcode中编写一些东西来确认并在这里发布。NSAttributedString是一个类集群,可能不是子类。您希望在子类中实现什么?它可以用一个扩展来近似,也可以完全避免。@danh我想创建一个在内部隐藏属性字典构造的类。来自C++的世界看起来不错,但现在我后悔了。什么标记类是不可派生的?为什么我可以继承它呢?请看这里关于集群的内容。你可以通过扩展来实现你的目标。我将在Xcode中写一些东西来确认,并在几天后发布到这里。