ios – 子类化NSMutableAttributedString在init上返回SIGABRT

我在我的一个项目中创建了一个NSMutableAttributedString的子类,以创建一个字符串,该字符串不断地将每个字符更改为init中数组中给出的颜色之一,但是当我尝试调用init方法时,我在initWithString上获得了一个sigabrt:方法.

RainbowString.h

#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:

- (id)initStringWithColors:(NSArray *)colors withString:(Nsstring *)string
{
    self = [super initWithString:string];
    if(self)
    {
        [self setColors:colors];
        [self cycle];
    }

    return self;
}

即使我只是调用[[RainbowString alloc] initWithString:@“Hello”];,我得到同样的错误

* Terminating app due to uncaught exception ‘NSinvalidargumentexception’,reason: ‘-[RainbowString initWithString:]: unrecognized selector sent to instance 0x166778c0’

更新

好吧,只是为了测试这个,我创建了一个NSMutableAttributedString的测试子类,绝对没有内容.我刚刚创建了子类并保持原样.

Test.h

#import <Foundation/Foundation.h>

@interface Test : NSMutableAttributedString

@end

我跑了:

[[NSMutableAttributedString alloc] initWithString:@"Hello"];

那跑得很好.但后来我跑了:

[[Test alloc] initWithString:@"Hello"];

同样的错误.我不允许继承NSMutableAttributedString或其他东西吗?

解决方法

你的结论是正确的. NS(Mutable)AttributedString是一个 class cluster,并且它们的子类化不起作用.遗憾的是,Apple文档并未将其明确标识为一个.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...