@@ -57,15 +57,17 @@ + (void)swizzleClass:(Class)aClass
57
57
Class class = NSClassFromString (@" GULSwizzlingCache" );
58
58
if (class) {
59
59
SEL cacheSelector = NSSelectorFromString (@" cacheCurrentIMP:forNewIMP:forClass:withSelector:" );
60
- NSInvocation *inv = [NSInvocation
61
- invocationWithMethodSignature: [class methodSignatureForSelector: cacheSelector]];
62
- [inv setSelector: cacheSelector];
63
- [inv setTarget: class];
64
- [inv setArgument: &(currentImp) atIndex: 2 ];
65
- [inv setArgument: &(newImp) atIndex: 3 ];
66
- [inv setArgument: &(resolvedClass) atIndex: 4 ];
67
- [inv setArgument: (void *_Nonnull) & (selector) atIndex: 5 ];
68
- [inv invoke ];
60
+ NSMethodSignature *methodSignature = [class methodSignatureForSelector: cacheSelector];
61
+ if (methodSignature != nil ) {
62
+ NSInvocation *inv = [NSInvocation invocationWithMethodSignature: methodSignature];
63
+ [inv setSelector: cacheSelector];
64
+ [inv setTarget: class];
65
+ [inv setArgument: &(currentImp) atIndex: 2 ];
66
+ [inv setArgument: &(newImp) atIndex: 3 ];
67
+ [inv setArgument: &(resolvedClass) atIndex: 4 ];
68
+ [inv setArgument: (void *_Nonnull) & (selector) atIndex: 5 ];
69
+ [inv invoke ];
70
+ }
69
71
}
70
72
#endif
71
73
@@ -77,20 +79,22 @@ + (void)swizzleClass:(Class)aClass
77
79
// If !originalImpOfClass, then the IMP came from a superclass.
78
80
if (originalImpOfClass) {
79
81
SEL selector = NSSelectorFromString (@" originalIMPOfCurrentIMP:" );
80
- NSInvocation *inv =
81
- [NSInvocation invocationWithMethodSignature: [class methodSignatureForSelector: selector]];
82
- [inv setSelector: selector];
83
- [inv setTarget: class];
84
- [inv setArgument: &(currentImp) atIndex: 2 ];
85
- [inv invoke ];
86
- IMP testOriginal;
87
- [inv getReturnValue: &testOriginal];
88
- if (originalImpOfClass != testOriginal) {
89
- GULLogWarning (kGULLoggerSwizzler , NO ,
90
- [NSString stringWithFormat: @" I-SWZ%06ld " ,
91
- (long )kGULSwizzlerMessageCodeMethodSwizzling000 ],
92
- @" Swizzling class: %@ SEL:%@ after it has been previously been swizzled." ,
93
- NSStringFromClass (resolvedClass), NSStringFromSelector (selector));
82
+ NSMethodSignature *methodSignature = [class methodSignatureForSelector: selector];
83
+ if (methodSignature != nil ) {
84
+ NSInvocation *inv = [NSInvocation invocationWithMethodSignature: methodSignature];
85
+ [inv setSelector: selector];
86
+ [inv setTarget: class];
87
+ [inv setArgument: &(currentImp) atIndex: 2 ];
88
+ [inv invoke ];
89
+ IMP testOriginal;
90
+ [inv getReturnValue: &testOriginal];
91
+ if (originalImpOfClass != testOriginal) {
92
+ GULLogWarning (kGULLoggerSwizzler , NO ,
93
+ [NSString stringWithFormat: @" I-SWZ%06ld " ,
94
+ (long )kGULSwizzlerMessageCodeMethodSwizzling000 ],
95
+ @" Swizzling class: %@ SEL:%@ after it has been previously been swizzled." ,
96
+ NSStringFromClass (resolvedClass), NSStringFromSelector (selector));
97
+ }
94
98
}
95
99
}
96
100
#endif
0 commit comments