我试图编写一些在iOS和OS之间工作的公共库,为了不让应用程序混乱,我在代码中添加了大量的#if TARGET_OS_IPHONE,我想我可以使用一个通用的.h同时对UIFont和NSFont进行子类,并为每个构建使用单独的.m文件。因此,我有下面的子类结构MyFent.h和MyFont_iOS.m和MyFont_OSX.m。每个目标都包含适当的.m文件。在iOS上可以很好地工作,但是在OSX上执行时,我会得到一个创建字体对象的EXC_BAD_ACCCES,其行如下
MyFont *myFont = MyFont fontWithName:@"Arial“大小:132.0;
我可以不使用子类NSFont吗?
下面是NSFont子类的基本代码示例(注意,到目前为止,子类中没有专门的代码。这只是一个基本子类)
MyFent-.h
#if TARGET_OS_IPHONE
@interface MyFont : UIFont
#else
@interface MyFont : NSFont
#endif
@endMyFont_iOS.m
#import "MyFont.h"
@implementation MyFont
@endMyFont_OSX.m
#import "MyFont.h"
@implementation MyFont
@end试图使用子类字体(在iOS应用程序中-!)
#import "MyFont.h"
...
MyFont *myFont = [MyFont fontWithName:@"Arial" size:45.0];尝试使用子类字体(在OS中!)
#import "MyFont.h"
...
MyFont *myFont = [MyFont fontWithName:@"Arial" size:132.0];FYI -我也收到了这条线路的警告
使用'MyFont *‘类型的表达式初始化'NSFont *’的不兼容指针类型
因此,我肯定做错了什么,但不明白为什么它强迫我使用NSFont,但在UIFont上工作得很好。
谢谢您的指导!
发布于 2014-03-31 16:01:50
fontWithName返回NSFont/UIFont -固定的。它不能被子类化
即使它有效,它也不是定义的行为。
您可以做的是拥有一个保存平台特定字体的包装器。
例如:
@implementation MyFont {
PlatformSpecificFont *_font
}
+ (instancetype)fontWithName:... {
_font = [PlatformSpecificFont fontWithName:...];
return self;
}https://stackoverflow.com/questions/22766388
复制相似问题