【问题标题】:Consistent iPhone App crash, when editing UITextField, tapping on Globe Icon on iPhone Keyboard, both on hardware and Simulator一致的 iPhone 应用程序崩溃,编辑 UITextField 时,在硬件和模拟器上点击 iPhone 键盘上的地球图标
【发布时间】:2017-12-26 21:49:09
【问题描述】:

环境

iPhone 模拟器或硬件。 Xcode 8.3.3 部署目标 8.0, 斯威夫特

找不到支持type 7的键盘iPhone-PortraitChoco-Emoji;使用 2383677590_PortraitChoco_iPhone-Emoji-Keyboard_Letters

[NSTaggedPointerString count]:无法识别的选择器发送到实例 0xa000000000073652

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSTaggedPointerString count]: unrecognized selector sent to instance 0xa000000000073652”

第一次抛出调用栈:

0   CoreFoundation                      0x0000000110461b0b __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x000000010f4e9141 objc_exception_throw + 48
2   CoreFoundation                      0x00000001104d1134 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3   CoreFoundation                      0x00000001103e8840 ___forwarding___ + 1024
4   CoreFoundation                      0x00000001103e83b8 _CF_forwarding_prep_0 + 120
5   CoreFoundation                      0x00000001103b403f CFLocaleCopyDisplayNameForPropertyValue + 863
6   CoreFoundation                      0x00000001103b3ccf -[__NSCFLocale displayNameForKey:value:] + 15
7   EmojiFoundation                     0x000000012419fdbf +[EMFEmojiCategory computeEmojiFlagsSortedByLanguage] + 712
8   EmojiFoundation                     0x00000001241979a6 +[EMFEmojiPreferences _cachedFlagCategoryEmoji:] + 256
9   EmojiFoundation                     0x000000012419f922 +[EMFEmojiCategory _emojiSetForIdentifier:] + 351
10  UIKit                               0x00000001121763bc +[UIKeyboardEmojiCategory categoryForType:] + 159
11  UIKit                               0x0000000111cf35fb -[UIKeyboardEmojiCollectionInputView collectionView:numberOfItemsInSection:] + 56
12  UIKit                               0x000000011269697d -[UICollectionViewData _updateItemCounts] + 469
13  UIKit                               0x0000000112699844 -[UICollectionViewData numberOfSections] + 22
14  UIKit                               0x000000011267c0f8 -[UICollectionViewFlowLayout _getSizingInfosWithExistingSizingDictionary:] + 506
15  UIKit                               0x000000011267e088 -[UICollectionViewFlowLayout _fetchItemsInfoForRect:] + 127
16  UIKit                               0x0000000112676ff2 -[UICollectionViewFlowLayout prepareLayout] + 272
17  UIKit                               0x000000011256e428 -[UIKeyboardEmojiLayout prepareLayout] + 50
18  UIKit                               0x0000000112697189 -[UICollectionViewData _prepareToLoadData] + 174
19  UIKit                               0x00000001126979fe -[UICollectionViewData validateLayoutInRect:] + 53
20  UIKit                               0x000000011264033e -[UICollectionView layoutSubviews] + 233
21  UIKit                               0x0000000111cf4fa5 __47-[UIKeyboardEmojiCollectionView layoutSubviews]_block_invoke + 42
22  UIKit                               0x0000000111dbb08e +[UIView(Animation) performWithoutAnimation:] + 90
23  UIKit                               0x0000000111cf4f74 -[UIKeyboardEmojiCollectionView layoutSubviews] + 104
24  UIKit                               0x0000000111dc655b -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1268
25  QuartzCore                          0x00000001119e1904 -[CALayer layoutSublayers] + 146
26  QuartzCore                          0x00000001119d5526 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 370
27  UIKit                               0x0000000111db4334 -[UIView(Hierarchy) layoutBelowIfNeeded] + 1108
28  UIKit                               0x0000000111cf4428 -[UIKeyboardEmojiCollectionInputView didMoveToWindow] + 82
29  UIKit                               0x0000000111dbff01 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 1737
30  UIKit                               0x0000000111db2b96 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 151
31  Foundation                          0x000000010f00b82b -[NSISEngine withBehaviors:performModifications:] + 155
32  UIKit                               0x0000000111db2a98 -[UIView(Hierarchy) _postMovedFromSuperview:] + 855
33  UIKit                               0x0000000111dc2a0a -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1927
34  UIKit                               0x0000000111db0cf8 -[UIView(Hierarchy) addSubview:] + 838
35  UIKit                               0x0000000112572b75 -[UIKBKeyplaneView setState:forKey:] + 1979
36  UIKit                               0x00000001121f06a7 -[UIKeyboardLayoutStar setKeyplaneName:] + 9044
37  UIKit                               0x00000001121f6689 -[UIKeyboardLayoutStar showKeyboardWithInputTraits:screenTraits:splitTraits:] + 482
38  UIKit                               0x0000000111fc76cb -[UIKeyboardImpl finishLayoutChangeWithArguments:] + 518
39  UIKit                               0x0000000111fc7e32 -[UIKeyboardImpl updateLayout] + 1161
40  UIKit                               0x0000000111fbf124 -[UIKeyboardImpl reinitializeAfterInputModeSwitch:] + 160
41  UIKit                               0x0000000111fbe7ec -[UIKeyboardImpl setKeyboardInputMode:userInitiated:updateIndicator:executionContext:] + 975
42  UIKit                               0x0000000111fc011e -[UIKeyboardImpl setInputModeToNextInPreferredListWithExecutionContext:] + 452
43  UIKit                               0x00000001122095a1 -[UIKeyboardLayoutStar completeSendStringActionForTouchUp:withActions:timestamp:interval:didLongPress:prevActions:executionContext:] + 884
44  UIKit                               0x00000001122088b1 -[UIKeyboardLayoutStar completeRetestForTouchUp:timestamp:interval:executionContext:] + 5227
45  UIKit                               0x0000000111ff2bd2 __45-[UIKeyboardLayout touchUpTaskForTouchState:]_block_invoke + 232
46  UIKit                               0x0000000112840782 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 374
47  UIKit                               0x0000000111ff28ab -[UIKeyboardLayout _touchEndedProcessingForTouches:] + 341
48  UIKit                               0x0000000111d727ea -[UIWindow _sendTouchesForEvent:] + 2707
49  UIKit                               0x0000000111d73f00 -[UIWindow sendEvent:] + 4114
50  UIKit                               0x0000000111d20a84 -[UIApplication sendEvent:] + 352
51  UIKit                               0x00000001125045d4 __dispatchPreprocessedEventFromEventQueue + 2926
52  UIKit                               0x00000001124fc532 __handleEventQueue + 1122
53  CoreFoundation                      0x0000000110407c01 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
54  CoreFoundation                      0x00000001103ed0cf __CFRunLoopDoSources0 + 527
55  CoreFoundation                      0x00000001103ec5ff __CFRunLoopRun + 911
56  CoreFoundation                      0x00000001103ec016 CFRunLoopRunSpecific + 406
57  GraphicsServices                    0x00000001156e0a24 GSEventRunModal + 62
58  UIKit                               0x0000000111d03134 UIApplicationMain + 159

任何有关解决此问题的线索都会很棒。

这里有更多细节,请看以下图片:

在使用以下步骤从设置 -> 键盘中删除表情符号键盘后,我能够产生一种不再发生崩溃的情况。

  1. 打开“设置”应用。
  2. 转到常规 > 键盘,然后点击顶部的键盘。 (它旁边会有一个数字 - 这是您安装的键盘的数量。)
  3. 点击编辑,然后点击表情符号旁边的红色圆圈。
  4. 点击删除。

这种解决方案是不可接受的,我们不能要求我们的客户遵循这些步骤,我们最好有崩溃的解决方案。

删除表情符号键盘前后:

【问题讨论】:

  • 两年半前发现类似的问题很有趣,stackoverflow.com/questions/27798912/…,但是,我通过广泛的搜索找不到有用的线程,希望我没有遗漏任何东西。
  • 多个 Input 元素发生同样的崩溃,例如,UITextView,选择 TextView 进行编辑,键盘打开。选择地球图标(按钮)、崩溃。 Also note, when English language is selected, and tap n globe will be switched to Spanish just fine, tapping again on Globe when the current language is Spanish Crash is observed.
  • 嗨,您找到解决方案了吗?
  • @NikolaiDoronin - 你的回答对我有用

标签: ios xcode crash uitextfield ios-simulator


【解决方案1】:

就我而言,这是因为AppleLanguages 属性不正确;它被设置为NSObject,但不是NSArray

错误:

NSUserDefaults.StandardUserDefaults["AppleLanguages"] = NSArray.FromObject(new NSString("en-US"));

应该是:

NSUserDefaults.StandardUserDefaults["AppleLanguages"] = NSArray.FromObjects(new NSString("en-US"));

【讨论】:

  • “AppleLanguages”键在这里有什么具体原因吗?我们不能使用任何其他键在 userdefaluts 中保存任何语言环境吗?
【解决方案2】:

找到了解决此问题的方法。这可能对我们的项目历史非常具体。不知何故,我们的项目最终遇到了这样一种情况,Base.lproj 有 en.lproj 和 es.lproj,而“使用基本国际化”设置被关闭,并且在运行时导致崩溃。当我们清理项目时,崩溃消失了。

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 2019-04-13
    • 2011-03-20
    • 2015-11-25
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    相关资源
    最近更新 更多