Ошибка UIFont exc_bad_access в iOS 4.3 - PullRequest
1 голос
/ 22 декабря 2011

Я устанавливаю свойство шрифта метки с помощью метода fontWithSize:, и, хотя оно отлично работает в iOS 5, iOS 4.3, я получаю ошибку exc_bad_access.Вот мой код:

UILabel *headerText = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width - 10, 42)];

headerText.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];


headerText.font = [[UIFont alloc] fontWithSize:8];

Опять же, этот код отлично работает в iOS 5, но вылетает как последняя строка в 4.3.Я проверил документы по API Apple и fontWithSize:, а также свойство шрифта UILabel, которые были рядом с iOS 2. Есть ли что-то еще здесь не так?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Вы пытаетесь вызвать методы для объекта, который никогда не был инициализирован.В частности, ваша строка

[[UIFont alloc] fontWithSize:8]

alloc создает новый объект шрифта, но затем никогда не инициализирует его.Последующий вызов -fontWithSize: завершается сбоем, поскольку предполагается, что объект был инициализирован.

Какой шрифт вы пытались создать?Поскольку вы пропустили инициализатор, вы никогда не предоставили семейство шрифтов.Конечно, UIFont даже не предоставляет хорошего инициализатора (вы можете позвонить -init, но нет способа предоставить семейство шрифтов).Это указывает на то, что вы должны использовать класс «удобные» методы для создания вашего шрифта, например, +[UIFont fontWithName:size] или +[UIFont systemFontOfSize:].В вашем случае я предполагаю, что вы хотите последнее, поэтому вы должны использовать

[UIFont systemFontOfSize:8]
1 голос
/ 22 декабря 2011

Если вы используете alloc для initial, метод обычно начинается с init.

fontWithSize : не используется для initial.

Возвращает объект шрифта, который являетсятакой же, как у получателя, но который имеет указанный размер.

Это означает, что вы должны вызывать его, используя существующий экземпляр шрифтаНапример:


    UIFont *font = [UIFont systemFontOfSize:12];
    UIFont *newFont = [font fontWithSize:24];

Но если вы хотите инициализировать экземпляр, вам нужно вызвать метод класса или метод экземпляра, начинающийся с init.

0 голосов
/ 22 декабря 2011

fontWithSize - это метод класса, а не метод экземпляра

в основном вы не выделяете объект UIFont, вы просто вызываете [UIFont fontWithSize:8]

...