zoukankan      html  css  js  c++  java
  • AppDelegate 中调用UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCente一定几率下出现 #28502 NSInternalInconsistencyException Invalid parameter not satisfying: bundleProxy != nil

    2019年2月27日:

    修复bug:

    查找资料:

     

     

     

    解决方式:添加分类,对系统方法替换,做非空校验

     #import "UNUserNotificationCenter+Hack.h"

    #import <objc/runtime.h>

    @implementation UNUserNotificationCenter (Hack)
    + (void)load {
    static dispatch_once_t _onceToken;
    dispatch_once(&_onceToken, ^{
    [self safeHook];
    });
    }

    + (void)safeHook {

    /*hook UNUserNotificationCenter's systemMethod - (id)initWithBundleProxy:(id)arg1;*/
    NSString * orig_initWithBundleProxyName = @"initWithBundleProxy:";

    SEL orig_initWithBundleSelector = NSSelectorFromString(orig_initWithBundleProxyName);

    if (![self instancesRespondToSelector:orig_initWithBundleSelector]) {
    return;
    }

    SEL alt_initWithBundleSelector = @selector(hk_initWithBundleProxy:);
    Method origMethod = class_getInstanceMethod(self, orig_initWithBundleSelector);
    Method altMethod = class_getInstanceMethod(self, @selector(hk_initWithBundleProxy:));

    class_addMethod(self,
    orig_initWithBundleSelector,
    class_getMethodImplementation(self, orig_initWithBundleSelector),
    method_getTypeEncoding(origMethod));
    class_addMethod(self,
    alt_initWithBundleSelector,
    class_getMethodImplementation(self, alt_initWithBundleSelector),
    method_getTypeEncoding(altMethod));

    method_exchangeImplementations(origMethod, altMethod);
    }

    - (instancetype)hk_initWithBundleProxy:(id)arg1 {

    if (nil==arg1||NSNull.null==arg1) return nil;
    // return [self hk_initWithBundleProxy:nil]; //crash
    return [self hk_initWithBundleProxy:arg1];
    }

    @end

  • 相关阅读:
    Spring 详解第三天
    Spring 详解第二天
    springmvc的运行流程分析
    Spring 详解第一天
    【Java面试题】40 你所知道的集合类都有哪些?主要方法?
    【Java面试题】39 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
    【Java面试题】38 Collection 和 Collections的区别
    【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性
    【Java面试题】36 List、Map、Set三个接口,存取元素时,各有什么特点?
    【Java面试题】35 List, Set, Map是否继承自Collection接口?
  • 原文地址:https://www.cnblogs.com/coolcold/p/10454867.html
Copyright © 2011-2022 走看看