1

我正在尝试fontWithName:size在 UIFont 中编写一个类别并覆盖。我这样做是为了进行单元测试,以避免由 ipad 而不是 OSX 上可用的字体名称引起的崩溃。因此,无论笔尖或代码请求什么,我都需要返回两个平台上都存在的简单字体。

我尝试了以下方法,但遇到了无限循环,关于如何实现这一点的任何想法?

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

编辑:

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

4

2 回答 2

1
+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize
{
    return [[[NSFont alloc] init] autorelease];
}

上述解决方案是对我问题的回答。但是为了解决单元测试问题,我最终将它们作为application测试而不是logic测试运行,这样它们在 iOS 环境中运行并且不会崩溃。更改是将 my to 设置Bundle Loader为指向我的应用程序目标,并将Test Hostto post 设置为 my Bundle Loader.

于 2011-11-14T03:49:31.790 回答
0

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

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

请参阅此问题的已接受答案以进行进一步讨论:Using Super in an Objective C Category?

于 2011-11-06T04:36:59.850 回答