Objective-C - Категория для возврата определенного шрифта? - PullRequest
1 голос
/ 06 ноября 2011

Я пытаюсь написать категорию и переопределить fontWithName:size в UIFont.Я делаю это для модульного тестирования, чтобы избежать сбоев, вызванных именами шрифтов, которые доступны на ipad, а не на OSX.Поэтому мне нужно вернуть простой шрифт, который существует на обеих платформах, независимо от того, что запрашивает перо или код.

Я попробовал следующее, но я столкнулся с бесконечным циклом, любая идея о том, как я могу этого добиться?

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

Редактировать:

Я также пытался вернуть CTFont, но моя цель теста не распознает CTFont?Любая идея, какой заголовок я должен импортировать, чтобы использовать CTFont?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011
+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize
{
    return [[[NSFont alloc] init] autorelease];
}

Приведенное выше решение является ответом на мой вопрос. Но для решения проблемы модульного тестирования я в итоге запустил их как application тесты вместо logic тестов, чтобы они работали в среде iOS и не зависали. Изменение должно было установить мой Bundle Loader, чтобы он указывал на цель моего приложения, и установить Test Host, чтобы публиковать в моем Bundle Loader.

0 голосов
/ 06 ноября 2011

Создав категорию, у которой есть метод с тем же самым, вы заменили оригинальный метод. Поэтому следующий вызов является рекурсивным: [UIFont fontWithName:@"Arial" size:fontSize];

Я бы создал новый метод с другим именем (особенно если параметр fontName вашего нового метода не используется) и переключил бы все существующие вызовы, чтобы использовать его.

См. Принятый ответ на этот вопрос для дальнейшего обсуждения: Использование Super в категории Objective C?

...