那在什么场景中会出现这种情况呢?

如果一个包含文字的输入元素有焦点,然后按钮的点击会导致输入失去焦点,然后接下来在输入时双按会重新得到焦点并从弹出bar中选择剪切复制粘贴,就会导致此error。

也就是说当WebView页面中的HTML中有如下代码的时候

<input type="text">
<input type="button" >

即有输入框和按钮的时候,会出现 [UIWebView cut:]: unrecognized selector sent to instance 的错误风险

简单的说就是若有一个WebView中有输入框,又有按钮的话,执行下面的操作就会出现这样的错误:

1.在输入框中输入内容。

2.点击Button让键盘消失。

3。双击输入框中的内容出现选择的bar后点击剪贴。就会出现闪退的现象。

的具体错误如下:

-- ::59.495 WebViewCutErrorDemo[:] -[UIWebView cut:]: unrecognized selector sent to instance 0x7f9612f19f40
-- ::59.497 WebViewCutErrorDemo[:] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIWebView cut:]: unrecognized selector sent to instance 0x7f9612f19f40'
*** First throw call stack:
(
CoreFoundation 0x000000010ddb6f45 __exceptionPreprocess +
libobjc.A.dylib 0x000000010d82edeb objc_exception_throw +
CoreFoundation 0x000000010ddbf56d -[NSObject(NSObject) doesNotRecognizeSelector:] +
CoreFoundation 0x000000010dd0ceea ___forwarding___ +
CoreFoundation 0x000000010dd0ca98 _CF_forwarding_prep_0 +
UIKit 0x000000010e6a3923 -[UICalloutBar buttonPressed:] +
UIKit 0x000000010e6a1e47 -[UICalloutBarButton fadeAndSendAction] +
Foundation 0x000000010d416c39 __NSFireDelayedPerform +
CoreFoundation 0x000000010dd17264 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ +
CoreFoundation 0x000000010dd16e11 __CFRunLoopDoTimer +
CoreFoundation 0x000000010dcd8821 __CFRunLoopRun +
CoreFoundation 0x000000010dcd7e08 CFRunLoopRunSpecific +
GraphicsServices 0x000000011158fad2 GSEventRunModal +
UIKit 0x000000010e16430d UIApplicationMain +
WebViewCutErrorDemo 0x000000010d32c86f main +
libdyld.dylib 0x00000001104f292d start +
)
libc++abi.dylib: terminating with uncaught exception of type NSException

仔细想想第三方登录的页面有出现这种问题的风险。

有人说这里面说是苹果系统的bug,原因是这种操作在响应链不能正确的发送,并最终发送到UIWebView的实例,而不是内部的UIWebDocumentView。

下面提供一下这种问题的解决方案,思想就是动态的为UIWebView添加响应的方法。

新建一个类 CutCopyPasteFixedWebView 继承 UIWebView

CutCopyPasteFixedWebView.h代码如下

//
// CutCopyPasteFixedWebView.h
// WebViewCutErrorDemo
//
// Created by lidaojian on 15/11/20.
// Copyright © 2015年 lidaojian. All rights reserved.
// #import <UIKit/UIKit.h> @interface CutCopyPasteFixedWebView : UIWebView @end

CutCopyPasteFixedWebView.m代码如下

//
// CutCopyPasteFixedWebView.m
// WebViewCutErrorDemo
//
// Created by lidaojian on 15/11/20.
// Copyright © 2015年 lidaojian. All rights reserved.
// #import "CutCopyPasteFixedWebView.h"
#import <objc/runtime.h> @implementation CutCopyPasteFixedWebView - (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
/// 适配防止崩溃
[self prepareForNoCrashes];
}
return self;
} - (UIView *)internalView
{
static const char internalViewKey = '\0';
/// 动态关联
UIView *internalView = objc_getAssociatedObject(self, &internalViewKey);
if (internalView == nil && self.subviews.count > ) {
for (UIView *view in self.scrollView.subviews) {
if ([[view.class description] hasPrefix:@"UIWeb"]) {
internalView = view;
objc_setAssociatedObject(self, &internalView, view, OBJC_ASSOCIATION_ASSIGN);
break;
}
}
}
return internalView;
} void webViewImplementUIResponderStandardEditActions(id self, SEL selector, id param)
{
/// IMP本质就是函数指针 methodForSelector 获得一个指向方法实现的指针,并可以使用该指针直接调用方法实现
IMP imp = [[self internalView] methodForSelector:selector]; /// 函数指针
void (*method)(id, SEL, id) = (void (*) (id, SEL, id))imp; /// 直接用函数指针调用方法
method([self internalView], selector, param); } - (void)prepareForNoCrashes
{
NSArray *selectors = @[@"cut:", @"copy:", @"paste:", @"select:", @"selectAll:", @"delete:", @"makeTextWritingDirectionLeftToRight:", @"makeTextWritingDirectionRightToLeft:", @"toggleBoldface:", @"toggleItalics:", @"toggleUnderline:", @"increaseSize:", @"decreaseSize:"]; for (NSString *selName in selectors) { /// 动态的根据方法名来获取方法
SEL selector = NSSelectorFromString(selName); /// 若父类没有实现则给父类添加selector方法,若父类实现了,并不修改父类的selector方法
class_addMethod(self.class, selector, (IMP)webViewImplementUIResponderStandardEditActions, "");
}
} @end

另外附上测试的HTML文件

<html>
<head>
</head>
<body>
<br><br>
<input type="text">
<input type="button" >
</body
</html>

若有疑问请加本人QQ:610774281。一起探讨一起进步。。。。

参考连接:

http://stackoverflow.com/questions/21316784/uiwebview-bug-uiwebview-cut-unrecognized-selector-sent-to-instance#

IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance的更多相关文章

  1. iOS:编译错误[__NSDictionaryM objectAtIndexedSubscript:]: unrecognized selector sent to instance 0xa79e61

    这个意思是,__NSDictionaryM  无法将值传到下标索引对象,言简意赅就是数组越界.可是再看看,这是数组吗?不是,所以.遇到这样的crash,我这里有两种情况: 1.首先看看你 indexP ...

  2. -[__NSArrayI removeAllObjects]: unrecognized selector sent to instance 0x7fa8dc830110

    问题 今天做项目,遇到了这个问题 -[__NSArrayI removeAllObjects]: unrecognized selector sent to instance 0x7fa8dc8301 ...

  3. [NSConcreteValue doubleValue]: unrecognized selector sent to instance

    今天需求说要给在进入某个页面给某个按钮加上放大效果,心想这还不简单,于是三下五除二的把动画加上提交测试了. 下面是动画的代码 NSTimeInterval time = CACurrentMediaT ...

  4. iOS 程序报错:reason: [NSArrayI addObject:]: unrecognized selector sent to instance

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI ad ...

  5. CBUUID UUIDString unrecognized selector sent to instance 错误

    CBUUID UUIDString unrecognized selector sent to instance 错误 ios7.0,4s 蓝牙出现上述错误! 查看api可知,错误原因,由于CBUUI ...

  6. ios unrecognized selector sent to instance出现的原因和解决方案

    概述:造成unrecognized selector sent to instance iphone,大部分情况下是因为对象被提前release了,在你心里不希望他release的情况下,指针还在,对 ...

  7. IOS微信API异常:unrecognized selector sent to instance 0x17005c9b0'

    开发IOS整合微信API的时候,在运行程序的过程中可能会在注册你的APPID的时候抛出此异常而导致程序崩溃. 异常描述 [7661:2826851] *** Terminating app due t ...

  8. iOS开发——异常:[__NSCFNumber length]: unrecognized selector sent to instance

      *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumbe ...

  9. Solve Error: 'NSInvalidArgumentException', reason: '-[UITableView mas_makeConstraints:]: unrecognized selector sent to instance 0x7fa5c402fa00'

    下面是iOS开发用第三方库可能出现的错误,及其解决方法: 1. 'NSInvalidArgumentException', reason: '-[UITableView mas_makeConstra ...

随机推荐

  1. linux PHP 编译安装参数详解

    linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...

  2. css3中webkit-box的用法

    转自:http://www.frontopen.com/288.html 1.之前要实现横列的web布局,通常就是float或者display:inline-block; 但是都不能做到真正的流体布局 ...

  3. pct xcode7

    1.) 打开你的Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然 ...

  4. typeof(self) 的作用

    block对于其变量都会形成strong reference,对于self也会形成strong reference ,而如果self本身对block也是 strong reference 的话,就会形 ...

  5. Codeforces Round #284 (Div. 2) C题(计算几何)解题报告

    题目地址 简要题意: 给出两个点的坐标,以及一些一般直线方程Ax+B+C=0的A.B.C,这些直线作为街道,求从一点走到另一点需要跨越的街道数.(两点都不在街道上) 思路分析: 从一点到另一点必须要跨 ...

  6. android 在使用studio 编写百度地图中遇到APP Scode码校验失败 问题

    直接用打包出来的apk查看签名,具体如下: 1) 将apk修改后缀为 .zip文件后解压: 2) 进入解压后的META-INF目录,该目录下会存在文件CERT.RSA 3) 在该目录下打开cmd,输入 ...

  7. string的实现

    面试常常用到string类的实现,自己总结了一下: #pragma once #include <iostream> #include <cassert> #include & ...

  8. AngularJs的UI组件ui-Bootstrap分享(十二)——Rating

    Rating是一个用于打分或排名的控件.看一个最简单的例子: <!DOCTYPE html> <html ng-app="ui.bootstrap.demo" x ...

  9. 在Win7 64位操作系统下安装Oracle 10g

    参见网址http://www.cnblogs.com/newstar/archive/2010/12/01/1878026.html 1.下载安装程序,可以到这个网址去下载 http://www.or ...

  10. readelf与动态库

    使用arm-linux-gcc编译的可执行文件可能会无法在开发板上执行,并提示:-/bin/sh xxx not found 解决办法: 在主机上使用readelf -d xxx 来查看该程序所需要的 ...