Skip to content

Commit f32ba68

Browse files
committed
remove direct crash when exception show,add warning log
1 parent 4312fae commit f32ba68

File tree

6 files changed

+42
-46
lines changed

6 files changed

+42
-46
lines changed

MJExtensionExample/MJExtensionExample/MJExtension/MJConst.h

+15-6
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,9 @@
55
#ifdef DEBUG // 调试状态
66
// 打开LOG功能
77
#define MJLog(...) NSLog(__VA_ARGS__)
8-
// 打开断言功能
9-
#define MJAssert(condition, desc) NSAssert(condition, @"\n报错文件:%@\n报错行数:第%d行\n报错方法:%s\n错误描述:%@", [NSString stringWithUTF8String:__FILE__], __LINE__, __FUNCTION__, desc)
10-
#define MJAssertParamNotNil(param) MJAssert(param, [[NSString stringWithFormat:@#param] stringByAppendingString:@"参数不能为nil"])
118
#else // 发布状态
129
// 关闭LOG功能
1310
#define MJLog(...)
14-
// 关闭断言功能
15-
#define MJAssert(condition, desc)
16-
#define MJAssertParamNotNil(param)
1711
#endif
1812

1913
// 颜色
@@ -22,4 +16,19 @@
2216
// 随机色
2317
#define MJRandomColor MJColor(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))
2418

19+
// 断言
20+
#define MJAssert2(condition, desc, returnValue) \
21+
if ((condition) == NO) { \
22+
NSString *file = [NSString stringWithUTF8String:__FILE__]; \
23+
MJLog(@"\n警告文件:%@\n警告行数:第%d行\n警告方法:%s\n警告描述:%@", file, __LINE__, __FUNCTION__, desc); \
24+
return returnValue; \
25+
}
26+
27+
#define MJAssert(condition, desc) MJAssert2(condition, desc, )
28+
29+
#define MJAssertParamNotNil2(param, returnValue) \
30+
MJAssert2(param, [[NSString stringWithFormat:@#param] stringByAppendingString:@"参数不能为nil"], returnValue)
31+
32+
#define MJAssertParamNotNil(param) MJAssertParamNotNil2(param, )
33+
2534
#endif
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
#ifndef __MJConst__M__
22
#define __MJConst__M__
33

4-
5-
6-
74
#endif

MJExtensionExample/MJExtensionExample/MJExtension/MJFoundation.m

+3-13
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,12 @@ @implementation MJFoundation
1515

1616
+ (void)initialize
1717
{
18-
_foundationClasses = @[@"NSArray",@"NSAutoreleasePool",@"NSBundle",@"NSByteOrder",@"NSCalendar",@"NSCharacterSet",@"NSCoder",@"NSData",@"NSDate",@"NSDateFormatter",@"NSDecimal",@"NSDecimalNumber",@"NSDictionary",@"NSEnumerator",@"NSError",@"NSException",@"NSFileHandle",@"NSFileManager",@"NSFormatter",@"NSHashTable",@"NSHTTPCookie",@"NSHTTPCookieStorage",@"NSIndexPath",@"NSIndexSet",@"NSInvocation",@"NSJSONSerialization",@"NSKeyValueCoding",@"NSKeyValueObserving",@"NSKeyedArchiver",@"NSLocale",@"NSLock",@"NSMapTable",@"NSMethodSignature",@"NSNotification",@"NSNotificationQueue",@"NSNull",@"NSNumberFormatter",@"NSOperation",@"NSOrderedSet",@"NSOrthography",@"NSPathUtilities",@"NSPointerArray",@"NSPointerFunctions",@"NSPort",@"NSProcessInfo",@"NSPropertyList",@"NSProxy",@"NSRange",@"NSSet",@"NSSortDescriptor",@"NSStream",@"NSString",@"NSTextCheckingResult",@"NSThread",@"NSTimeZone",@"NSTimer",@"NSURL",@"NSURLAuthenticationChallenge",@"NSURLCache",@"NSURLConnection",@"NSURLCredential",@"NSURLCredentialStorage",@"NSURLError",@"NSURLProtectionSpace",@"NSURLProtocol",@"NSURLRequest",@"NSURLResponse",@"NSUserDefaults",@"NSValue",@"NSValueTransformer",@"NSXMLParser",@"NSZone"];
18+
_foundationClasses = @[@"NSArray",@"NSMutableArray",@"NSData",@"NSMutableData",@"NSDate",@"NSDictionary",@"NSMutableDictionary",@"NSString",@"NSMutableString"];
1919
}
2020

2121
+ (BOOL)isClassFromFoundation:(Class)c
2222
{
23-
MJAssertParamNotNil(c);
24-
__block BOOL contains = [_foundationClasses containsObject:NSStringFromClass(c)];
25-
if (!contains) {
26-
[_foundationClasses enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {
27-
Class superc = NSClassFromString(obj);
28-
if ([c isSubclassOfClass:superc]) {
29-
contains = YES;
30-
*stop = YES;
31-
}
32-
}];
33-
}
34-
return contains;
23+
MJAssertParamNotNil2(c, NO);
24+
return [_foundationClasses containsObject:NSStringFromClass(c)];
3525
}
3626
@end

MJExtensionExample/MJExtensionExample/MJExtension/NSObject+MJKeyValue.m

+11-11
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ @implementation NSObject (MJKeyValue)
2020
*/
2121
+ (instancetype)objectWithJSONData:(NSData *)data
2222
{
23-
MJAssertParamNotNil(data);
23+
MJAssertParamNotNil2(data, nil);
2424

2525
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
2626
return [self objectWithKeyValues:dict];
@@ -34,7 +34,7 @@ + (instancetype)objectWithJSONData:(NSData *)data
3434
+ (instancetype)objectWithKeyValues:(NSDictionary *)keyValues
3535
{
3636
NSString *desc = [NSString stringWithFormat:@"keyValues is not a NSDictionary - keyValues参数不是一个字典, keyValues is a %@ - keyValues参数是一个%@", keyValues.class, keyValues.class];
37-
MJAssert([keyValues isKindOfClass:[NSDictionary class]], desc);
37+
MJAssert2([keyValues isKindOfClass:[NSDictionary class]], desc, nil);
3838

3939
id model = [[self alloc] init];
4040
[model setKeyValues:keyValues];
@@ -48,7 +48,7 @@ + (instancetype)objectWithKeyValues:(NSDictionary *)keyValues
4848
*/
4949
+ (instancetype)objectWithFilename:(NSString *)filename
5050
{
51-
MJAssertParamNotNil(filename);
51+
MJAssertParamNotNil2(filename, nil);
5252
NSString *file = [[NSBundle mainBundle] pathForResource:filename ofType:nil];
5353
return [self objectWithFile:file];
5454
}
@@ -60,7 +60,7 @@ + (instancetype)objectWithFilename:(NSString *)filename
6060
*/
6161
+ (instancetype)objectWithFile:(NSString *)file
6262
{
63-
MJAssertParamNotNil(file);
63+
MJAssertParamNotNil2(file, nil);
6464
NSDictionary *keyValues = [NSDictionary dictionaryWithContentsOfFile:file];
6565
return [self objectWithKeyValues:keyValues];
6666
}
@@ -72,7 +72,7 @@ + (instancetype)objectWithFile:(NSString *)file
7272
- (void)setKeyValues:(NSDictionary *)keyValues
7373
{
7474
NSString *desc = [NSString stringWithFormat:@"keyValues is not a NSDictionary - keyValues参数不是一个字典, keyValues is a %@ - keyValues参数是一个%@", keyValues.class, keyValues.class];
75-
MJAssert([keyValues isKindOfClass:[NSDictionary class]], desc);
75+
MJAssert2([keyValues isKindOfClass:[NSDictionary class]], desc, );
7676

7777
[self enumerateIvarsWithBlock:^(MJIvar *ivar, BOOL *stop) {
7878
// 来自Foundation框架的成员变量,直接返回
@@ -150,7 +150,7 @@ - (NSDictionary *)keyValues
150150
*/
151151
+ (NSArray *)objectArrayWithJSONData:(NSData *)data
152152
{
153-
MJAssertParamNotNil(data);
153+
MJAssertParamNotNil2(data, nil);
154154

155155
NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
156156
return [self objectArrayWithKeyValuesArray:array];
@@ -165,7 +165,7 @@ + (NSArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray
165165
{
166166
// 0.判断真实性
167167
NSString *desc = [NSString stringWithFormat:@"objectArray is not a NSArray - objectArray不是一个数组, objectArray is a %@ - objectArray参数是一个%@", objectArray.class, objectArray.class];
168-
MJAssert([objectArray isKindOfClass:[NSArray class]], desc);
168+
MJAssert2([objectArray isKindOfClass:[NSArray class]], desc, nil);
169169

170170
// 1.过滤
171171
if (![objectArray isKindOfClass:[NSArray class]]) return objectArray;
@@ -189,7 +189,7 @@ + (NSArray *)objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
189189
{
190190
// 1.判断真实性
191191
NSString *desc = [NSString stringWithFormat:@"keyValuesArray is not a keyValuesArray - keyValuesArray不是一个数组, keyValuesArray is a %@ - keyValuesArray参数是一个%@", keyValuesArray.class, keyValuesArray.class];
192-
MJAssert([keyValuesArray isKindOfClass:[NSArray class]], desc);
192+
MJAssert2([keyValuesArray isKindOfClass:[NSArray class]], desc, nil);
193193

194194
// 2.创建数组
195195
NSMutableArray *modelArray = [NSMutableArray array];
@@ -212,7 +212,7 @@ + (NSArray *)objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
212212
*/
213213
+ (NSArray *)objectArrayWithFilename:(NSString *)filename
214214
{
215-
MJAssertParamNotNil(filename);
215+
MJAssertParamNotNil2(filename, nil);
216216
NSString *file = [[NSBundle mainBundle] pathForResource:filename ofType:nil];
217217
return [self objectArrayWithFile:file];
218218
}
@@ -224,7 +224,7 @@ + (NSArray *)objectArrayWithFilename:(NSString *)filename
224224
*/
225225
+ (NSArray *)objectArrayWithFile:(NSString *)file
226226
{
227-
MJAssertParamNotNil(file);
227+
MJAssertParamNotNil2(file, nil);
228228
NSArray *keyValuesArray = [NSArray arrayWithContentsOfFile:file];
229229
return [self objectArrayWithKeyValuesArray:keyValuesArray];
230230
}
@@ -239,7 +239,7 @@ + (NSArray *)objectArrayWithFile:(NSString *)file
239239
*/
240240
- (NSString *)keyWithPropertyName:(NSString *)propertyName
241241
{
242-
MJAssertParamNotNil(propertyName);
242+
MJAssertParamNotNil2(propertyName, nil);
243243
NSString *key = nil;
244244
// 1.查看有没有需要替换的key
245245
if ([self respondsToSelector:@selector(replacedKeyFromPropertyName)]) {

MJExtensionExample/MJExtensionExample/main.m

+13-13
Original file line numberDiff line numberDiff line change
@@ -220,23 +220,23 @@ void objectArray2keyValuesArray()
220220
int main(int argc, const char * argv[])
221221
{
222222
@autoreleasepool {
223-
// // 简单的字典 -> 模型
224-
// keyValues2object();
225-
//
226-
// // 复杂的字典 -> 模型 (模型里面包含了模型)
227-
// keyValues2object2();
223+
// 简单的字典 -> 模型
224+
keyValues2object();
225+
226+
// 复杂的字典 -> 模型 (模型里面包含了模型)
227+
keyValues2object2();
228228

229229
// 复杂的字典 -> 模型 (模型的数组属性里面又装着模型)
230230
keyValues2object3();
231231

232-
// // 字典数组 -> 模型数组
233-
// keyValuesArray2objectArray();
234-
//
235-
// // 模型转字典
236-
// object2keyValues();
237-
//
238-
// // 模型数组 -> 字典数组
239-
// objectArray2keyValuesArray();
232+
// 字典数组 -> 模型数组
233+
keyValuesArray2objectArray();
234+
235+
// 模型转字典
236+
object2keyValues();
237+
238+
// 模型数组 -> 字典数组
239+
objectArray2keyValuesArray();
240240
}
241241
return 0;
242242
}

0 commit comments

Comments
 (0)