最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS13適配三指撤銷和文案限長實例詳解

 更新時間:2023年01月29日 14:12:44   作者:yuec  
這篇文章主要為大家介紹了iOS13適配三指撤銷和文案限長實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

在適配iOS13的過程中,UITextField輸入中文的時候三指撤銷產(chǎn)生了 crash。

Bugly報錯

NSInternalInconsistencyException
setGroupIdentifier:: _NSUndoStack 0x1206532f0 is in invalid state, calling setGroupIdentifier with no begin group mark

堆棧信息

 CoreFoundation	___exceptionPreprocess + 220
 libobjc.A.dylib	objc_exception_throw + 56
 Foundation	-[_NSUndoStack groupIdentifier]
 Foundation	-[NSUndoManager undoNestedGroup] + 240
 UIKitCore	-[UIUndoGestureInteraction undo:] + 72
 UIKitCore	-[UIKBUndoInteractionHUD performDelegateUndoAndUpdateHUDIfNeeded] + 96
 UIKitCore	-[UIKBUndoInteractionHUD controlActionUpInside:] + 152
 UIKitCore	-[UIApplication sendAction:to:from:forEvent:] + 96
 xxxxx	-[UIApplication(MemoryLeak) swizzled_sendAction:to:from:forEvent:] + 288
 UIKitCore	-[UIControl sendAction:to:forEvent:] + 240
 UIKitCore	-[UIControl _sendActionsForEvents:withEvent:] + 408
 UIKitCore	-[UIControl touchesEnded:withEvent:] + 520
 UIKitCore	-[UIWindow _sendTouchesForEvent:] + 2324
 UIKitCore	-[UIWindow sendEvent:] + 3352
 UIKitCore	-[UIApplication sendEvent:] + 336
 UIKitCore	___dispatchPreprocessedEventFromEventQueue + 5880
 UIKitCore	___handleEventQueueInternal + 4924
 UIKitCore	___handleHIDEventFetcherDrain + 108
 CoreFoundation	___CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
 CoreFoundation	___CFRunLoopDoSource0 + 80
 CoreFoundation	___CFRunLoopDoSources0 + 180
 CoreFoundation	___CFRunLoopRun + 1080
 CoreFoundation	CFRunLoopRunSpecific + 464
 GraphicsServices	GSEventRunModal + 104
 UIKitCore	UIApplicationMain + 1936
 xxxxx	main + 148
 libdyld.dylib	_start + 4

問題定位

沒有太多思路的時候,通過注釋代碼,最終定位到了問題所在。

[self addTarget:observer
         action:@selector(textChange:)
forControlEvents:UIControlEventEditingChanged];
- (void)textChange:(UITextField *)textField {
    ... ... 
    UITextRange *selectedRange = [textField markedTextRange];
    if (!selectedRange || !selectedRange.start) {
        if (destText.length > maxLength) {
            textField.text = [destText substringToIndex:maxLength];
        }
    }
}

這段代碼在輸入的時候會限制文案的長度。三指撤銷會觸發(fā)UIControlEventEditingChanged事件,執(zhí)行textChange,此時獲取到的markedTextRangenil,即便是存在markedText。這就導(dǎo)致UITextFieldtext有可能會被修改。修改文案后再繼續(xù)執(zhí)行撤銷操作,必定會產(chǎn)生 crash。

解決方案

將文案判長和截取異步添加到主隊列,在下一個runloop執(zhí)行。

- (void)textChange:(UITextField *)textField {
    dispatch_async(dispatch_get_main_queue(), ^{
        ... ...
    });
}

數(shù)字截斷后 crash

數(shù)字輸入限制長度后,超過長度后繼續(xù)輸入,這個時候撤銷也會產(chǎn)生crash,而且上面的方法不可行。目前想到的方案是在UITextField的回調(diào)方法進行輸入的攔截。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    /// 輸入數(shù)字后截取字符串仍舊可以觸發(fā)撤銷操作導(dǎo)致crash, 在這里攔截一下
    if (textField.keyboardType == UIKeyboardTypeNumberPad
        && range.location >= textField.tt_maxLength) {
            return NO;
    }
    return YES;
}

以上就是iOS13適配三指撤銷和文案限長實例詳解的詳細內(nèi)容,更多關(guān)于iOS13適配三指撤銷文案限長的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Xcode中代碼注釋編寫的一些小技巧

    Xcode中代碼注釋編寫的一些小技巧

    如何在 Xcode 中編寫規(guī)范注釋,規(guī)范注釋可以在Xcode的快速幫助檢查器(quickheliector)中顯示,這篇文章主要給大家介紹了關(guān)于Xcode中代碼注釋編寫的一些小技巧,需要的朋友可以參考下
    2021-10-10
  • 基于iOS實現(xiàn)倒影效果

    基于iOS實現(xiàn)倒影效果

    這篇文章主要為大家詳細介紹了基于iOS實現(xiàn)倒影效果的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • ios Plist文件配置方法

    ios Plist文件配置方法

    下面小編就為大家分享一篇ios Plist文件配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • iOS 將系統(tǒng)自帶的button改裝成上圖片下文字的樣子

    iOS 將系統(tǒng)自帶的button改裝成上圖片下文字的樣子

    這篇文章主要介紹了 iOS 將系統(tǒng)自帶的button改裝成上圖片下文字的樣子,代碼是通過繼承UIButton,然后再重寫layoutSubviews方法,對自帶的圖片和titleLabel進行重新的layout。下面通過本文給大家分享下實現(xiàn)代碼
    2016-12-12
  • iOS中震動反饋(UIFeedbackGenerator)與系統(tǒng)震動詳解

    iOS中震動反饋(UIFeedbackGenerator)與系統(tǒng)震動詳解

    最近要做一個項目,需要持續(xù)響鈴并振動,所以就有了這篇文章,下面這篇文章主要給大家介紹了關(guān)于iOS中震動反饋(UIFeedbackGenerator)與系統(tǒng)震動的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • 如何在 iOS 應(yīng)用中添加位置信息

    如何在 iOS 應(yīng)用中添加位置信息

    這篇文章主要介紹了如何在 iOS 應(yīng)用中添加位置信息,幫助大家更好的理解和學(xué)習(xí)使用ios,感興趣的朋友可以了解下
    2021-02-02
  • iOS 11 下適配UITableView 問題

    iOS 11 下適配UITableView 問題

    這篇文章主要介紹了iOS 11 下適配UITableView 問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-09-09
  • iOS中如何引用另一個工程的方法教程

    iOS中如何引用另一個工程的方法教程

    在iOS開發(fā)中,引用另一個工程是大家可能會遇到的一個問題,所以這篇文章主要給大家介紹了關(guān)于iOS中如何引用另一個工程的相關(guān)資料,文中通過圖文介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 一篇文章讓你看懂IOS中的block為何再也不需要WeakSelf弱引用

    一篇文章讓你看懂IOS中的block為何再也不需要WeakSelf弱引用

    這篇文章主要給大家介紹了關(guān)于IOS中block為何再也不需要WeakSelf弱引用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • iOS圖片壓縮、濾鏡、剪切及渲染等詳解

    iOS圖片壓縮、濾鏡、剪切及渲染等詳解

    這篇文章主要給大家介紹了關(guān)于iOS圖片壓縮、濾鏡、剪切及渲染等的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評論

莫力| 自贡市| 承德县| 独山县| 卢湾区| 涿州市| 西乌| 塔河县| 简阳市| 松溪县| 东宁县| 湛江市| 孟州市| 石首市| 安阳县| 林甸县| 克什克腾旗| 吉木萨尔县| 佛山市| 元江| 开封市| 鸡东县| 陆丰市| 博兴县| 丽江市| 资兴市| 呼和浩特市| 信阳市| 康乐县| 宿州市| 绥芬河市| 阿勒泰市| 萨嘎县| 宜宾市| 福建省| 庆城县| 蓬安县| 丽江市| 汉源县| 建昌县| 靖远县|