98 lines
2.8 KiB
Mathematica
98 lines
2.8 KiB
Mathematica
|
|
//
|
||
|
|
// NSMutableString+AvoidCrash.m
|
||
|
|
// https://github.com/chenfanfang/AvoidCrash
|
||
|
|
//
|
||
|
|
// Created by mac on 16/10/6.
|
||
|
|
// Copyright © 2016年 chenfanfang. All rights reserved.
|
||
|
|
//
|
||
|
|
|
||
|
|
#import "NSMutableString+AvoidCrash.h"
|
||
|
|
|
||
|
|
#import "AvoidCrash.h"
|
||
|
|
|
||
|
|
@implementation NSMutableString (AvoidCrash)
|
||
|
|
|
||
|
|
+ (void)avoidCrashExchangeMethod {
|
||
|
|
|
||
|
|
static dispatch_once_t onceToken;
|
||
|
|
dispatch_once(&onceToken, ^{
|
||
|
|
|
||
|
|
Class stringClass = NSClassFromString(@"__NSCFString");
|
||
|
|
|
||
|
|
//replaceCharactersInRange
|
||
|
|
[AvoidCrash exchangeInstanceMethod:stringClass method1Sel:@selector(replaceCharactersInRange:withString:) method2Sel:@selector(avoidCrashReplaceCharactersInRange:withString:)];
|
||
|
|
|
||
|
|
//insertString:atIndex:
|
||
|
|
[AvoidCrash exchangeInstanceMethod:stringClass method1Sel:@selector(insertString:atIndex:) method2Sel:@selector(avoidCrashInsertString:atIndex:)];
|
||
|
|
|
||
|
|
//deleteCharactersInRange
|
||
|
|
[AvoidCrash exchangeInstanceMethod:stringClass method1Sel:@selector(deleteCharactersInRange:) method2Sel:@selector(avoidCrashDeleteCharactersInRange:)];
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
//=================================================================
|
||
|
|
// replaceCharactersInRange
|
||
|
|
//=================================================================
|
||
|
|
#pragma mark - replaceCharactersInRange
|
||
|
|
|
||
|
|
- (void)avoidCrashReplaceCharactersInRange:(NSRange)range withString:(NSString *)aString {
|
||
|
|
|
||
|
|
@try {
|
||
|
|
[self avoidCrashReplaceCharactersInRange:range withString:aString];
|
||
|
|
}
|
||
|
|
@catch (NSException *exception) {
|
||
|
|
NSString *defaultToDo = AvoidCrashDefaultIgnore;
|
||
|
|
[AvoidCrash noteErrorWithException:exception defaultToDo:defaultToDo];
|
||
|
|
}
|
||
|
|
@finally {
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//=================================================================
|
||
|
|
// insertString:atIndex:
|
||
|
|
//=================================================================
|
||
|
|
#pragma mark - insertString:atIndex:
|
||
|
|
|
||
|
|
- (void)avoidCrashInsertString:(NSString *)aString atIndex:(NSUInteger)loc {
|
||
|
|
|
||
|
|
@try {
|
||
|
|
[self avoidCrashInsertString:aString atIndex:loc];
|
||
|
|
}
|
||
|
|
@catch (NSException *exception) {
|
||
|
|
NSString *defaultToDo = AvoidCrashDefaultIgnore;
|
||
|
|
[AvoidCrash noteErrorWithException:exception defaultToDo:defaultToDo];
|
||
|
|
}
|
||
|
|
@finally {
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//=================================================================
|
||
|
|
// deleteCharactersInRange
|
||
|
|
//=================================================================
|
||
|
|
#pragma mark - deleteCharactersInRange
|
||
|
|
|
||
|
|
- (void)avoidCrashDeleteCharactersInRange:(NSRange)range {
|
||
|
|
|
||
|
|
@try {
|
||
|
|
[self avoidCrashDeleteCharactersInRange:range];
|
||
|
|
}
|
||
|
|
@catch (NSException *exception) {
|
||
|
|
NSString *defaultToDo = AvoidCrashDefaultIgnore;
|
||
|
|
[AvoidCrash noteErrorWithException:exception defaultToDo:defaultToDo];
|
||
|
|
}
|
||
|
|
@finally {
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
@end
|