iOS 崩溃:点击键盘中的地球仪转到表情符号键盘会导致崩溃
iOS Crash: Tapping the globe in keyboard to go to the emoji keyboard causes crash
问题
点击 uitextfield 时会显示键盘。一旦键盘出现,它就可以正常工作。我可以将键盘更改为除表情符号键盘之外的任何键盘。每次尝试切换到表情符号键盘时,它都会崩溃。
这是崩溃日志
2019-02-13 17:19:01.775380-0500 xxxxxxxx[56054:2366411] libMobileGestalt MobileGestalt.c:1645: Could not retrieve region info
2019-02-13 17:19:01.775648-0500 xxxxxxx56054:2366411] -[NSTaggedPointerString count]: unrecognized selector sent to instance 0xb424b425bd6497ae
2019-02-13 17:19:01.788405-0500 xxxxxxxx[56054:2366411] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString count]: unrecognized selector sent to instance 0xb424b425bd6497ae'
*** First throw call stack:
(
0 CoreFoundation 0x00000001126831bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x0000000111c21735 objc_exception_throw + 48
2 CoreFoundation 0x00000001126a1f44 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x0000000112687ed6 ___forwarding___ + 1446
4 CoreFoundation 0x0000000112689da8 _CF_forwarding_prep_0 + 120
5 CoreFoundation 0x00000001125b6d38 CFLocaleCopyDisplayNameForPropertyValue + 1000
检查 "Use Base Internationalization" 设置是否已关闭,将其打开并清理项目和 运行。
如果您使用 UserDefaults.standard.set("en_US", forKey: "AppleLanguages")
之类的东西,请确保设置一个数组而不仅仅是一个字符串。你应该用 UserDefaults.standard.set(["en_US"], forKey: "AppleLanguages")
代替。
如果你设置了一个字符串,它可能会对 NSLocale 对象做一些奇怪的事情,有效地导致依赖它的任何东西崩溃。表情符号键盘就是其中之一,因为所有字符都有一个本地化的替代名称,在运行时使用用户设备的区域设置获取。
附带说明一下,不建议使用语言设置,而是使用本地化工具,除非您认为您的用例非常具体。
问题
点击 uitextfield 时会显示键盘。一旦键盘出现,它就可以正常工作。我可以将键盘更改为除表情符号键盘之外的任何键盘。每次尝试切换到表情符号键盘时,它都会崩溃。
这是崩溃日志
2019-02-13 17:19:01.775380-0500 xxxxxxxx[56054:2366411] libMobileGestalt MobileGestalt.c:1645: Could not retrieve region info
2019-02-13 17:19:01.775648-0500 xxxxxxx56054:2366411] -[NSTaggedPointerString count]: unrecognized selector sent to instance 0xb424b425bd6497ae
2019-02-13 17:19:01.788405-0500 xxxxxxxx[56054:2366411] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString count]: unrecognized selector sent to instance 0xb424b425bd6497ae'
*** First throw call stack:
(
0 CoreFoundation 0x00000001126831bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x0000000111c21735 objc_exception_throw + 48
2 CoreFoundation 0x00000001126a1f44 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x0000000112687ed6 ___forwarding___ + 1446
4 CoreFoundation 0x0000000112689da8 _CF_forwarding_prep_0 + 120
5 CoreFoundation 0x00000001125b6d38 CFLocaleCopyDisplayNameForPropertyValue + 1000
如果您使用 UserDefaults.standard.set("en_US", forKey: "AppleLanguages")
之类的东西,请确保设置一个数组而不仅仅是一个字符串。你应该用 UserDefaults.standard.set(["en_US"], forKey: "AppleLanguages")
代替。
如果你设置了一个字符串,它可能会对 NSLocale 对象做一些奇怪的事情,有效地导致依赖它的任何东西崩溃。表情符号键盘就是其中之一,因为所有字符都有一个本地化的替代名称,在运行时使用用户设备的区域设置获取。
附带说明一下,不建议使用语言设置,而是使用本地化工具,除非您认为您的用例非常具体。