Notification也是通过扩展的方式接进去的,目前支持的功能有:
- JS->JS
- JS->Native
- Native->JS
扩展的方法如下:
- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo; - (void)addNotificationName:(NSString *)notificationName processor:(NSDictionary *)processor object:(id)notificationSender; - (void)removeNotificationName:(NSString *)notificationName instanceName:(NSString *)instanceName;
分别为:
发起Notification
添加Notification
移除Notification
详细实现代码如下:
- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo { [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:notificationSender userInfo:userInfo]; } - (void)addNotificationName:(NSString *)notificationName processor:(NSDictionary *)processor object:(id)notificationSender { if (notificationName && [processor isKindOfClass:[NSDictionary class]]) { if (!_processors[notificationName]) _processors[notificationName] = [[NSMutableArray alloc] initWithCapacity:0]; (!processor) ?: [_processors[notificationName] addObject:processor]; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(p_handleNotification:) name:notificationName object:notificationSender]; } - (void)removeNotificationName:(NSString *)notificationName instanceName:(NSString *)instanceName { if (!notificationName || !instanceName) { return; } [_processors[notificationName] enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([instanceName isEqualToString:obj[kInstanceName]]) { [_processors removeObjectForKey:obj]; } }]; } - (void)p_handleNotification:(NSNotification *)notify { [_processors[notify.name] enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { [[NJCSBridge getInstance] runJSFunctionWithConfigures:obj]; }]; }
使用示例:
var notifiConfig = {kInstanceName:"VCInstanceName", kMethodName:"methodName"};//生成配置 nativeBridge.addNotificationName_processor("NOTIFICATIONNAME", notifiConfig, null);//添加监听 nativeBridge.postNotificationName("NOTIFICATIONNAME", null, null);//发起通知