Cocoa NSFont 'leading'属性构建错误



在AudioUnit插件中,我使用的是NSFont。

NSFontManager* fontManager = [NSFontManager sharedFontManager];
NSFont* nativefont = [fontManager fontWithFamily:[NSString stringWithCString: fontFamilyName.c_str() encoding: NSUTF8StringEncoding ] traits:fontTraits weight:5 size:fontSize ];
NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
[style setAlignment : NSTextAlignmentLeft];
NSMutableDictionary* native2 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
nativefont, NSFontAttributeName,
style, NSParagraphStyleAttributeName,
nil];
// .. later
void someFunction(NSMutableDictionary* native2)
{   
float lineGap = [native2[NSFontAttributeName] leading];

编译器说(关于最后一行(:从不兼容的类型分配给'float''NSCollectionLayoutSpacing*_Nullable'

注意:自从切换到Xcode 11.1后,这一操作最近才失败,在Xcode的旧版本上,它构建得还可以。感谢您的帮助。

在代码中,表达式native2[NSFontAttributeName]的类型未知,因此类型为id。编译器将允许您向id类型的对象发送任何消息而不抱怨,但它没有用于确定消息返回值类型的上下文。

您想要获得NSFontleading属性,但编译器只是随机选择任何leading属性选择器,我猜它最终选择了NSCollectionLayoutEdgeSpacingleading属性,其返回类型为NSCollectionLayoutSpacing而不是float

我怀疑强制转换表达式[(NSFont*)(native2[NSFontAttributeName]) leading]会起作用,但如果我在写这段代码,我只会引用原始(键入的(对象,因为你已经有了它:

float lineGap = nativefont.leading;

相关内容

  • 没有找到相关文章

最新更新