[__NSCFConstantString pointSize]: 未识别的选择器发送到实例

8

我试图将一个带属性的字符串放入一个NSTextField中,这个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个回答

38

你做得很对。但是你犯了一个小错误。你将NSString作为NSFontAttributeName的属性传递,但它期望的是NSFont

试试这个。

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

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];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接