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 *> *
类型;为调用栈信息