Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 子类化NSFont_Objective C_Macos_Nsfont - Fatal编程技术网

Objective c 子类化NSFont

Objective c 子类化NSFont,objective-c,macos,nsfont,Objective C,Macos,Nsfont,尝试编写一些在iOS和OS X之间工作的通用库。为了避免在代码中加入大量的if-if-TARGET-if-OS-IPHONE而造成应用程序混乱,我想我可以使用一个通用的.h对UIFont和NSFont进行子类化,并且只需为每个构建使用单独的.m文件。因此,我有以下子类结构MyFont.h和MyFont_iOS.m以及MyFont_OSX.m。每个目标都包含相应的.m文件。在iOS上运行良好,但在OSX上执行时,我会收到一个EXC_BAD_ACCES命令,用类似 MyFont*MyFont=[My

尝试编写一些在iOS和OS X之间工作的通用库。为了避免在代码中加入大量的if-if-TARGET-if-OS-IPHONE而造成应用程序混乱,我想我可以使用一个通用的.h对UIFont和NSFont进行子类化,并且只需为每个构建使用单独的.m文件。因此,我有以下子类结构MyFont.h和MyFont_iOS.m以及MyFont_OSX.m。每个目标都包含相应的.m文件。在iOS上运行良好,但在OSX上执行时,我会收到一个EXC_BAD_ACCES命令,用类似

MyFont*MyFont=[MyFont fontWithName:@“Arial”大小:132.0]

我可以不子类NSFont吗

这是我的NSFont子类的基本代码示例(注意,到目前为止,我在子类中没有专门的代码。这只是一个基本子类)

MyFont.h

#if TARGET_OS_IPHONE
@interface MyFont : UIFont
#else
@interface MyFont : NSFont
#endif
@end
MyFont\u iOS.m

#import "MyFont.h"
@implementation MyFont
@end
#import "MyFont.h"
@implementation MyFont
@end
MyFont\u OSX.m

#import "MyFont.h"
@implementation MyFont
@end
#import "MyFont.h"
@implementation MyFont
@end
尝试使用子分类字体(在iOS应用程序中-工作正常!)

尝试使用子分类字体(在OS X应用程序中-崩溃!)

仅供参考-我也收到了这条线上的警告

使用“NSFont*”类型的表达式初始化“MyFont*”时,指针类型不兼容

所以我肯定是做错了什么,但就是不明白为什么它强迫我使用NSFont,但在UIFont上效果很好


谢谢你的指导

fontWithName返回NSFont/UIFont-已修复。它不能被分类

即使它起作用,也不是明确的行为


您可以使用一个包装器来保存平台特定的字体

e、 g


fontWithName返回NSFont/UIFont-已修复。它不能被分类

即使它起作用,也不是明确的行为


您可以使用一个包装器来保存平台特定的字体

e、 g


包装器是一种很好的方法。另一种选择是:根据目标

#define MyFont NSFont


如果两者都需要不同的代码,则可以向类添加扩展

包装器是一种很好的方法。另一种选择是:根据目标

#define MyFont NSFont


如果两者都需要不同的代码,则可以向类添加扩展

脸掌!这是我反复思考的典型案例。非常感谢。这很好用!脸掌!这是我反复思考的典型案例。非常感谢。这很好用!谢谢@Daij Djan花时间来帮助我。这是我尝试的第一件事,因为我必须更改所有的UI代码来处理新属性,所以我的代码非常混乱。例如,我必须从textView.font=myFont转到textView.font=myFont.font。看起来是多余的,需要我更新大量的UI代码。谢谢你的帮助。谢谢@Daij Djan花时间帮我。这是我尝试的第一件事,因为我必须更改所有的UI代码来处理新属性,所以我的代码非常混乱。例如,我必须从textView.font=myFont转到textView.font=myFont.font。看起来是多余的,需要我更新大量的UI代码。谢谢你的帮助。
#define MyFont UIFont