8

NSAlert内にあるNSTextField内に属性付き文字列を配置しようとしています。コードは次のとおりです。

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を指定するとすぐに正常に機能するため、文字列に関連しているようです。助けてください!

4

2 に答える 2

38

あなたは正しいことをしました。しかし、あなたは小さな間違いを犯しました。NSStringの属性として渡しましたNSFontAttributeNameが、期待していNSFontます。

これを試して。

    NSFont *boldFontName = [NSFont boldSystemFontOfSize:12];
[attrString beginEditing];
NSRange ran = NSMakeRange(0, 8);
[attrString addAttribute:NSFontAttributeName
                   value:boldFontName
                   range:ran];
于 2012-12-22T09:24:34.100 に答える
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];
}
于 2014-07-30T09:15:21.867 に答える