Objective-C-返回特定字体的类别?

Objective-C-返回特定字体的类别?,objective-c,categories,uifont,Objective C,Categories,Uifont,我正在尝试编写一个类别,并在UIFont中重写fontWithName:size。我这样做是为了进行单元测试,以避免因ipad而非OSX上可用的字体名称而导致崩溃。因此,我需要返回一个简单的字体,它存在于两个平台上,与nib或代码请求的内容无关 我尝试了下面的方法,但我遇到了一个无限循环,你知道我该如何实现吗 + (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize { return [UIFont font

我正在尝试编写一个类别,并在UIFont中重写
fontWithName:size
。我这样做是为了进行单元测试,以避免因ipad而非OSX上可用的字体名称而导致崩溃。因此,我需要返回一个简单的字体,它存在于两个平台上,与nib或代码请求的内容无关

我尝试了下面的方法,但我遇到了一个无限循环,你知道我该如何实现吗

+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize
{
    return [UIFont fontWithName:@"Arial" size:fontSize];
}
编辑:


我还尝试返回CTFont,但我的测试目标无法识别CTFont?你知道我应该导入什么标题来使用CTFont吗

通过创建具有相同方法的类别,您已经替换了原始方法。因此,以下调用是递归调用:
[UIFont-fontWithName:@“Arial”size:fontSize]

我将创建一个具有不同名称的新方法(尤其是在新方法的fontName参数未使用时),并切换所有现有调用以使用该名称


请参阅此问题的公认答案以进行进一步讨论:

通过创建一个类别,该类别具有与您已替换原始方法相同的方法。因此,以下调用是递归调用:
[UIFont-fontWithName:@“Arial”size:fontSize]

我将创建一个具有不同名称的新方法(尤其是在新方法的fontName参数未使用时),并切换所有现有调用以使用该名称

有关进一步讨论,请参阅此问题的公认答案:

上述解决方案是对我问题的回答。 但是为了解决单元测试问题,我最终将它们作为
应用程序
测试而不是
逻辑
测试来运行,这样它们就可以在iOS环境中运行,并且不会崩溃。更改是将my
捆绑加载程序设置为指向我的应用程序目标,并将测试主机设置为post to my
捆绑加载程序

上述解决方案是对我问题的回答。
但是为了解决单元测试问题,我最终将它们作为
应用程序
测试而不是
逻辑
测试来运行,这样它们就可以在iOS环境中运行,并且不会崩溃。更改是将我的
捆绑加载程序
设置为指向我的应用程序目标,并将
测试主机
设置为发布到我的
捆绑加载程序

,这并不能解决我的问题。我无法控制nibs在初始化字体时调用的方法。请查看我发布的链接。它讨论了方法swizzling的优缺点。使用方法swizzling您可以替换一个方法并调用原始方法,但这并不能解决我的问题。我无法控制nibs在初始化字体时调用的方法。请查看我发布的链接。它讨论了方法swizzling的优缺点。使用方法swizzling可以替换一个方法并调用原始方法
+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize
{
    return [[[NSFont alloc] init] autorelease];
}