[__NSCFConstantString pointSize]:发送到instanc的无法识别的选择器

时间:2012-12-22 08:59:23

标签: objective-c macos cocoa nsattributedstring nsalert

我试图将一个归因字符串放在NSTextField中,它本身在NSAlert中 这是我的代码:

NSTextField *label1 = [[NSTextField alloc]initWithFrame:NSMakeRect(0, 23, 50, 20)];
[label1 setEditable:FALSE];
[label1 setAllowsEditingTextAttributes:TRUE];
[label1 setBezeled:FALSE];
label1.backgroundColor = [NSColor clearColor];
NSString *login = @"Username";
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:login];
NSString *boldFontName = [[NSFont boldSystemFontOfSize:12] fontName];
[attrString beginEditing];
NSRange ran = NSMakeRange(0, 8);
[attrString addAttribute:NSFontAttributeName
                   value:boldFontName
                   range:ran];

[attrString endEditing];
NSLog(@"%@",attrString);
[label1 setAttributedStringValue:attrString];
[alert setAccessoryView:label1];
[alert runModal];

但是,只要调出[alert runModal],我的应用就会崩溃

"[__NSCFConstantString pointSize]: unrecognized selector sent to instance 0x7fff74035bb0"

我不确定为什么会这样。它似乎与字符串有关,因为只要我删除[alert setAccessoryView:label1]或给label1一个标准的nsstring,它就可以正常工作。请帮忙!

2 个答案:

答案 0 :(得分:38)

你做得对。但你犯了一个小错误。您已将NSString作为NSFontAttributeName的属性传递,但预计会NSFont

试试这个。

    NSFont *boldFontName = [NSFont boldSystemFontOfSize:12];
[attrString beginEditing];
NSRange ran = NSMakeRange(0, 8);
[attrString addAttribute:NSFontAttributeName
                   value:boldFontName
                   range:ran];

答案 1 :(得分:1)

上述答案绝对正确。我曾经遇到过同样的崩溃,以前在iOS 7.0.3&仅限7.0.4,并且在所有其他版本中都能完美运行。经过这么多的调查,我才知道@" HelveticaNeue-Italic"在iOS 7.0.3和版本中不可用7.0.4版本,因此我曾经在这些版本中崩溃。

我已使用以下代码解决了该问题:

self.headerFont = [UIFont fontWithName:@"HelveticaNeue-Italic" size:16.0f];
if (self.headerFont == nil) {
    self.headerFont = [UIFont fontWithName:@"HelveticaNeue" size:16.0f];
}