#objective-c #uitextfield #runtime #uicolor
#objective-c #uitextfield #время выполнения #uicolor
Вопрос:
Сбой:
- (void)viewDidLoad
{
[ super viewDidLoad ];
UITextField * textField = [ [ UITextField alloc ] init ];
textField.textColor = [ UIColor colorWithCIColor:[ CIColor colorWithString:@"0 0 0 1" ] ];
[ self.view addSubview:textField ];
}
Консоль Xcode:
не удалось выполнить код поддержки для чтения данных класса Objective-C. Это может снизить качество доступной информации о типе.
Не сбой:
- (void)viewDidLoad
{
[ super viewDidLoad ];
UITextField * textField = [ [ UITextField alloc ] init ];
textField.text = @"text";
textField.textColor = [ UIColor colorWithCIColor:[ CIColor colorWithString:@"0 0 0 1" ] ];
[ self.view addSubview:textField ];
}
в пустом проекте и пустом UIViewController. iOS 14.2 / iPhone XS / Xcode 12.2 (12B45b).
Также происходит сбой после очистки всего существующего текста в UITextFiled.
Комментарии:
1. Выглядит как действительно забавная причудливая ошибка. Я думаю, что это какая-то проблема с инициализацией. Если вы это сделаете, например
UIColor.blackColor
, тогда все в порядке. Другой способ решить эту проблему — установить текст на что угодно, и он работает, но установить его, например@""
, на пустую строку, и он снова вылетает. (PS — люблю ваш широкоформатный синтаксис)2. И что такое журнал сбоев / реальная ошибка? Потому что это предупреждение, а не ошибка сбоя. Может быть, трассировка стека?
Ответ №1:
Я проверил этот сбой в тестовом приложении. Оказывается, это бесконечно саморекурсивный сбой, связанный со стеком (см. Трассировка стека).
Сбой происходит из-за того, как вы инициализируете свой UIColor из CIColor. Это очень нетрадиционно. Объекты CIColor действительно предназначены для использования в контексте CoreImage.
Если вы это сделаете textField.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
, сбоя не будет.
При всем этом ваш код, вероятно, не должен сбоить, и, скорее всего, это ошибка в API. Возможно, стоит отправить отчет об ошибке.