可可NSFont“前导”属性构建错误

问题描述 投票:0回答:1

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

float lineGap = [native2[NSFontAttributeName] leading];

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

注意:自从切换到Xcode 11.1以来,这直到最近才失败,在较旧版本的XCode上它构建良好。任何帮助表示赞赏。

cocoa nsmutabledictionary nsfont
1个回答
0
投票

在您的代码中,表达式native2[NSFontAttributeName]的类型未知,因此类型为id。编译器将让您发送任何消息的类型均为id的对象而不会产生任何投诉,但它没有确定消息返回值类型的上下文。

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

怀疑转换表达式[(NSFont*)(native2[NSFontAttributeName]) leading]可以解决问题,但是如果我编写此代码,我将仅引用原始(类型化)对象,因为您已经拥有它:

float lineGap = nativefont.leading;
© www.soinside.com 2019 - 2024. All rights reserved.