我在我的一个项目中创建了一个NSMutableAttributedString的子类,以创建一个字符串,该字符串不断地将每个字符更改为init中数组中给出的颜色之一,但是当我尝试调用init方法时,我在initWithString上获得了一个sigabrt:方法.
RainbowString.h@H_502_3@
#import <Foundation/Foundation.h> @interface RainbowString : NSMutableAttributedString @property (nonatomic) NSArray* colors; @property (nonatomic) NSTimeInterval duration; @property (nonatomic) NSTimer* timer; - (id)initStringWithColors:(NSArray*)colors withString:(NSString*)string; - (id)initStringWithColors:(NSArray*)colors withCycleDuration:(NSTimeInterval)duration withString:(NSString*)string; - (void)stop; - (void)start:(NSTimeInterval)duration; @end
initWithColors:@H_502_3@
- (id)initStringWithColors:(NSArray *)colors withString:(NSString *)string { self = [super initWithString:string]; if(self) { [self setColors:colors]; [self cycle]; } return self; }
即使我只是调用[[RainbowString alloc] initWithString:@“Hello”];,我得到同样的错误:@H_502_3@
* Terminating app due to uncaught exception ‘NSInvalidArgumentException’,reason: ‘-[RainbowString initWithString:]: unrecognized selector sent to instance 0x166778c0’@H_502_3@
更新@H_502_3@
好吧,只是为了测试这个,我创建了一个NSMutableAttributedString的测试子类,绝对没有内容.我刚刚创建了子类并保持原样.@H_502_3@
Test.h@H_502_3@
#import <Foundation/Foundation.h> @interface Test : NSMutableAttributedString @end
我跑了:@H_502_3@
[[NSMutableAttributedString alloc] initWithString:@"Hello"];
那跑得很好.但后来我跑了:@H_502_3@
[[Test alloc] initWithString:@"Hello"];
解决方法
你的结论是正确的. NS(Mutable)AttributedString是一个
class cluster,并且它们的子类化不起作用.遗憾的是,Apple文档并未将其明确标识为一个.