Objective-C-返回特定字体的类别?
我正在尝试编写一个类别,并在UIFont中重写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
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];
}