Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField defaultTextAttributes错误?_Ios_Swift_Xcode_Uitextfield - Fatal编程技术网

Ios UITextField defaultTextAttributes错误?

Ios UITextField defaultTextAttributes错误?,ios,swift,xcode,uitextfield,Ios,Swift,Xcode,Uitextfield,所以我的问题是我的应用程序被冻结了,因为它的主线程正在执行无限循环或递归 经过一些调试,我发现只有在将包含字体属性的defaulttexttributes设置为UITextField之后,问题才会出现。我能够在我从头开始创建的新项目中重现这个问题,只从情节提要加载了一个UIViewController,并且只包含一个UITextField: class ViewController: UIViewController { @IBOutlet weak var textField: UI

所以我的问题是我的应用程序被冻结了,因为它的主线程正在执行无限循环或递归

经过一些调试,我发现只有在将包含字体属性的
defaulttexttributes
设置为
UITextField
之后,问题才会出现。我能够在我从头开始创建的新项目中重现这个问题,只从情节提要加载了一个
UIViewController
,并且只包含一个
UITextField

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let font = UIFont.systemFont(ofSize: 17, weight: .regular)
        textField.defaultTextAttributes = [ NSAttributedString.Key.font : font ]
    }
}
以下是暂停执行时主线程堆栈跟踪的示例:

#0  0x00000001116050d0 in -[__NSSingleEntryDictionaryI isEqualToDictionary:] ()
#1  0x00000001116374b7 in CFEqual ()
#2  0x000000011802420e in TDescriptor::Equal(TDescriptor const*) const ()
#3  0x000000011802413b in TCFBase<TDescriptor>::ClassEqual(void const*, void const*) ()
#4  0x000000011cba7a94 in -[UICTFontDescriptor isEqual:] ()
#5  0x000000011cbda45a in -[_UIFontDescriptorCacheKey _isEqualToKey:] ()
#6  0x00000001117324ff in -[__NSDictionaryM objectForKey:] ()
#7  0x000000011cc1213e in __25-[_UICache objectForKey:]_block_invoke ()
#8  0x0000000112507d48 in _dispatch_client_callout ()
#9  0x00000001125169bf in _dispatch_lane_barrier_sync_invoke_and_complete ()
#10 0x000000011cc120af in -[_UICache objectForKey:] ()
#11 0x000000011cbebdce in +[UIFont _fontWithDescriptor:size:textStyleForScaling:pointSizeForScaling:maximumPointSizeAfterScaling:forIB:legibilityWeight:] ()
#12 0x000000011421570a in -[UITextField _copyFont:newSize:maxSize:] ()
#13 0x00000001142167d9 in -[UITextField _updateAutosizeStyleIfNeeded] ()
#14 0x00000001142199cd in -[UITextField _layoutContent] ()
#15 0x000000011421a0e7 in -[UITextField layoutSubviews] ()
#16 0x0000000114404d01 in -[UIView(CALayerDelegate) layoutSublayersOfLayer:] ()
#17 0x0000000115d18d41 in -[CALayer layoutSublayers] ()
#18 0x0000000115d1ef33 in CA::Layer::layout_if_needed(CA::Transaction*) ()
#19 0x0000000115d2a86a in CA::Layer::layout_and_display_if_needed(CA::Transaction*) ()
#20 0x0000000115c717c8 in CA::Context::commit_transaction(CA::Transaction*, double) ()
#21 0x0000000115ca6ad1 in CA::Transaction::commit() ()
#22 0x0000000113f37461 in __34-[UIApplication _firstCommitBlock]_block_invoke_2 ()
#23 0x000000011163504c in __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ ()
#24 0x00000001116347b8 in __CFRunLoopDoBlocks ()
#25 0x000000011162f644 in __CFRunLoopRun ()
#26 0x000000011162ee16 in CFRunLoopRunSpecific ()
#27 0x000000011a105bb0 in GSEventRunModal ()
#28 0x0000000113f1fb48 in UIApplicationMain ()
#29 0x000000010f81472b in main
\0 0x0000000111600D0 in-[\uu NSSingleEntryDictionaryI isEqualToDictionary:]()
#1 0x00000001116374b7英寸CFEqual()
#TDescriptor::Equal(TDescriptor const*)const()中的2 0x000000011802420e
#TCFBase::ClassEqual(无效常量*,无效常量*)中的3 0x000000011802413b()
#4 0x000000011cba7a94英寸-[UICTFontDescriptor isEqual:]()
#5 0x000000011cbda45a in-[\u UIFontDescriptorCacheKey\u IseQualKey:]()
#在-[\uu\NSDictionaryM objectForKey:]中使用6 0x000000011117324ff
#7 0x000000011cc1213e在[uuuuu25-[[uuiCache objectForKey:][uBlock\uInvoke()
#8 0x0000000112507d48,位于调度客户调用()中
#9 0x00000001125169bf处于调度、通道、屏障、同步、调用和完成状态()
#10 0x000000011cc120af在-[\u UICache objectForKey:]()
#11 0x000000011CBBDCE in+[UIFont\u fontWithDescriptor:size:textStyleForScaling:pointSizeForScaling:maximumPointSizeAfterScaling:forIB:易读性权重:()
#12 0x000000011421570a in-[UITextField\u copyFont:newSize:maxSize:()
#13 0x00000001142167d9英寸-[UITextField\u UpdateAutoSizeStyleIfRequired]()
#14 0x00000001142199cd输入-[UITextField\u layoutContent]()
#15 0x000000011421a0e7 in-[UITextField布局子视图]()
#16 0x000000011440D01 in-[UIView(CALayerDelegate)布局层的子层:()
#17 0x0000000115d18d41 in-[CALayer layoutSublayers]()
#如果需要,CA::Layer::layout中的18 0x0000000115d1ef33(CA::Transaction*)()
#19 0x0000000115d2a86a位于CA::Layer::layout_中,需要时显示(CA::Transaction*)()
#20 0x0000000115c717c8位于CA::Context::commit_事务(CA::transaction*,double)()
#CA::Transaction::commit()中的21 0x0000000115ca6ad1()
#22 0x0000000113f37461位于\uuuu34-[UIApplication\uFirstCommitBlock]\uBlock\uInvoke\u2()中
#23 0x000000011163504c输入CFRUNLOOP正在调用输出到块
#24 0x00000001116347b8英寸cfrunloopdoblock()
#25 0x000000011162f644英寸\uuuu CFRunLoopRun()
#CFRunLoopRunSpecific()中的26 0x000000011162ee16
#GSEventRunModal()中的27 0x000000011a105bb0
#UIApplicationMain()中的28 0x0000000113f1fb48
#29 0x000000010f81472b主接线盒
问题在模拟器(iOS 13.2.2)和真实设备(iOS 13.1.3)上重现。 Xcode版本11.2.1(11B500)。 这是
UITextField
中的错误还是我做错了什么


UPD:看起来我只和系统字体有关。将字体更改为例如
UIFont(名称:“HelveticaNeue”,大小:17)
可以解决此问题。

我猜这是一个可报告的错误

如果文本字段不是空的,则问题似乎不会出现,因此,作为一种解决方法:

    let t = textField.text
    textField.text = "abc"
    let font = UIFont.systemFont(ofSize: 17, weight: .regular)
    textField.defaultTextAttributes = [ NSAttributedString.Key.font : font ]
    textField.text = t

iOS 14.2中仍然存在此错误

字体上的相等性似乎有问题?