TPreventKVC项目的GitHub地址: https://github.com/tobedefined/TPreventKVC
实现方式
使用+load方法替换NSObject的 -setValue:forUndefinedKey: / valueForUndefinedKey: / setNilValueForKey: 这几个方法,防止产生 NSUnknownKeyException 和 NSInvalidArgumentException 异常,引发崩溃。
具体实现如下:
1 |
|
特点
使用runtime动态替换方法防止在使用KVC的方法时候产生 NSUnknownKeyException & NSInvalidArgumentException 错误引发崩溃。
-valueForKey:setValue:forKey:-setValue:forKeyPath:-valueForKeyPath:等等
如何导入
源文件
将TPreventKVC文件夹内部的所有文件拖入项目中即可
CocoaPods
CocoaPods是一个Cocoa项目管理器。你可以使用以下命令去安装CocoaPods:
1 | $ gem install cocoapods |
要使用CocoaPods将TPreventKVC集成到您的Xcode项目中,请在Podfile中加入:
1 | pod 'TPreventKVC' |
然后运行一下命令:
1 | $ pod install |
Carthage
Carthage是一个去中心化的依赖管理器,它构建并提供所使用的库的framework。
你可以使用 Homebrew并运行下面的命令安装Carthage
1 | $ brew update |
要将TPreventKVC集成到使用Carthage的Xcode项目中,请在Cartfile中加入:
1 | github "tobedefined/TPreventKVC" |
运行carthage update构建framework,并将编译的对应平台的TPreventKVC.framework拖入Xcode项目中。
使用方法
简单使用
导入项目之后即可。
运行错误信息获取
在APP的 main.m文件的main()函数中 或者 在APP的didFinishLaunching方法中 加入以下代码可以获得缺失方法的具体信息:
1 | [NSObject setHandleKVCErrorBlock:^(__unsafe_unretained Class cls, NSString *key, KVCErrorType errorType) { |
Some Definitions
在NSObject+PreventKVC.h中有以下定义
1 | typedef NS_ENUM(NSUInteger, KVCErrorType) { |
cls:Class类型;为产生错误的类或对象的Class,可使用NSStringFromClass(cls)返回类名字符串key:NSString *类型;为产生错误的KeyerrorType:KVCErrorType类型;为产生错误的类型callStackSymbols:NSArray<NSString *> *类型;为调用栈信息