Appleは以前nil
でvalueForUndefinedKey:
を呼び出すには、引数nil
リードとvalueForKey:
を呼び出すiOSの10で をvalueForKey:
メソッドの動作を変更し、このメソッドはオーバーライドされなかった場合、それは失敗します。しかし今、この呼び出しがなければ即座に失敗します。
GAITrackerModel
は、valueForUndefinedKey:
をオーバーライドしました。これは、入力引数に関係なくnilを返します。
私は一時的な解決策(Googleはこれを修正すべきであり、このコードは、生産準備ができていないですが、それまで)として以前の動作を復元してメソッドのスウィズリングを提供することができます:私たちはバージョン3.17をリリースしました
#import <objc/runtime.h>
void SwizzleInstanceMethod(Class classToSwizzle, SEL origSEL, Class myClass, SEL newSEL) {
Method methodToSwizzle = class_getInstanceMethod(classToSwizzle, origSEL);
Method myMethod = class_getInstanceMethod(myClass, newSEL);
class_replaceMethod(classToSwizzle, newSEL, method_getImplementation(methodToSwizzle), method_getTypeEncoding(methodToSwizzle));
class_replaceMethod(classToSwizzle, origSEL, method_getImplementation(myMethod), method_getTypeEncoding(myMethod));
}
@interface FixGoogleSDKiOS10 : NSObject
@end
@implementation FixGoogleSDKiOS10
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
SwizzleInstanceMethod([NSObject class], @selector(valueForKey:), [self class], @selector(yb_valueForKey:));
});
}
- (nullable id)yb_valueForKey:(NSString *)key {
if (!key) {
return [self valueForUndefinedKey:key];
}
return [self yb_valueForKey:key];
}
@end