代码之家  ›  专栏  ›  技术社区  ›  Rudolfs Bundulis

“未识别的选择器发送到实例”,其类继承自NSAttribute String

  •  1
  • Rudolfs Bundulis  · 技术社区  · 9 年前

    我有一个继承自 NSAttributedString 这样地:

    #import <Foundation/Foundation.h>
    
    @interface Text : NSAttributedString
    
    -(id) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing;
    
    @end
    

    文本m:

    #import "Text.h"
    
    #import <Cocoa/Cocoa.h>
    
    @implementation Text
    
    -(id) initWithString:(NSString*) text andFont:(NSFont*)font andLineHeight:(float) lineHeight andLetterSpacing:(float) letterSpacing
    {
        NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setParagraphStyle: [NSParagraphStyle defaultParagraphStyle]];
        paragraphStyle.lineHeightMultiple = lineHeight;
        NSDictionary* attributes =
        @{
            NSFontAttributeName: font,
            NSKernAttributeName: @(letterSpacing),
            NSParagraphStyleAttributeName: paragraphStyle
        };
        self = [super initWithString:text attributes:attributes];
        return self;
    }
    
    @end
    

    当我像这样实例化类时:

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

    我得到以下例外:

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

    选择器在基类中可用,事件ctrl单击它会跳转到 NSAttributedText 班谁能指出我做错了什么?参数不是零指针,调用似乎是合法的。唯一看起来奇怪的是错误有类名 Text NSAttribute字符串 .

    1 回复  |  直到 9 年前
        1
  •  4
  •   danh    9 年前

    对于子类,使用扩展。这样地

    // 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 {
        // ...
    }
    

    只要您想使用方便的初始值设定项,就可以导入该扩展标题。