iOS 14 崩溃 UITextField with textColor = [ UIColor colorWithCIColor: ]

iOS 14 crash UITextField with textColor = [ UIColor colorWithCIColor: ]

崩溃:

- (void)viewDidLoad
{
    [ super viewDidLoad ];
    
    UITextField * textField = [ [ UITextField alloc ] init ];
    textField.textColor = [ UIColor colorWithCIColor:[ CIColor colorWithString:@"0 0 0 1" ] ];
    [ self.view addSubview:textField ];
}

Xcode 控制台:

warning: could not execute support code to read Objective-C class data in the process. This may reduce the quality of type information available.

不要崩溃:

- (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 中的所有现有文本后也会崩溃。

我在测试应用中验证了这次崩溃。事实证明,这是一种无限自我递归、堆栈挖掘的崩溃(参见堆栈跟踪)。

由于您从 CIColor 初始化 UIColor 的方式,它正在崩溃。这是非常不寻常的。 CIColor 对象确实应该在 CoreImage 的上下文中使用。

如果你这样做 textField.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; 就不会崩溃。

综上所述,您的代码可能 不应该 崩溃,并且它可能是 API 中的错误。可能值得提交错误报告。