Cocoa NSFont 'leading' 属性构建错误
Cocoa NSFont 'leading' attribute build error
在 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];
编译器说(关于最后一行):assigning to 'float' from incompatible type 'NSCollectionLayoutSpacing * _Nullable'
注意:自从切换到 Xcode 11.1 后,最近才失败,在旧版本的 XCode 上构建正常。任何帮助表示赞赏。
在您的代码中,表达式 native2[NSFontAttributeName]
是未知类型,因此属于 id
类型。编译器将允许您毫无怨言地发送类型为 id
的对象的任何消息,但它没有上下文来确定消息的 return 值的类型。
您想获得 NSFont
的 leading
属性,但编译器只是随机选择任何 leading
属性 选择器,而我'我猜它最终选择了 NSCollectionLayoutEdgeSpacing
的 leading
属性,它的 return 类型是 NSCollectionLayoutSpacing
而不是 float
.
我怀疑转换表达式 [(NSFont*)(native2[NSFontAttributeName]) leading]
可以解决问题,但如果我正在编写这段代码,我会简单地引用原始(类型化)对象,因为你已经有了它:
float lineGap = nativefont.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];
编译器说(关于最后一行):assigning to 'float' from incompatible type 'NSCollectionLayoutSpacing * _Nullable'
注意:自从切换到 Xcode 11.1 后,最近才失败,在旧版本的 XCode 上构建正常。任何帮助表示赞赏。
在您的代码中,表达式 native2[NSFontAttributeName]
是未知类型,因此属于 id
类型。编译器将允许您毫无怨言地发送类型为 id
的对象的任何消息,但它没有上下文来确定消息的 return 值的类型。
您想获得 NSFont
的 leading
属性,但编译器只是随机选择任何 leading
属性 选择器,而我'我猜它最终选择了 NSCollectionLayoutEdgeSpacing
的 leading
属性,它的 return 类型是 NSCollectionLayoutSpacing
而不是 float
.
我怀疑转换表达式 [(NSFont*)(native2[NSFontAttributeName]) leading]
可以解决问题,但如果我正在编写这段代码,我会简单地引用原始(类型化)对象,因为你已经有了它:
float lineGap = nativefont.leading;