ios - 选择器“getExportedModule”没有已知的类方法
问题描述
调整代码后,我将 3 个错误减少为 2 个,但我仍然不确定如何解决最终错误。
- 选择器“getExportedModuleForName:”没有已知的类方法
-选择器'getExportedModule:'没有已知的类方法
#import <UMReactNativeAdapter/UMReactNativeEventEmitter.h>
#import <UMCore/UMEventEmitter.h>
#import <UMCore/UMExportedModule.h>
#import <UMCore/UMModuleRegistry.h>
@interface UMReactNativeEventEmitter ()
@property (nonatomic, assign) int listenersCount;
@property (nonatomic, weak) UMModuleRegistry *ModuleRegistry;
@property (nonatomic, strong) NSMutableDictionary<NSString *, NSNumber *> *modulesListenersCounts;
@end
@implementation UMReactNativeEventEmitter
- (instancetype)init
{
if (self = [super init]) {
_listenersCount = 0;
_modulesListenersCounts = [NSMutableDictionary dictionary];
}
return self;
}
UM_REGISTER_MODULE();
+ (NSString *)moduleName
{
return @"UMReactNativeEventEmitter";
}
+ (const NSArray<Protocol *> *)exportedInterfaces
{
return @[@protocol(UMEventEmitterService)];
}
- (NSArray<NSString *> *)supportedEvents
{
NSMutableSet<NSString *> *eventsAccumulator = [NSMutableSet set];
for (UMExportedModule *exportedModule in [UMModuleRegistry getAllExportedModules]) {
if ([exportedModule conformsToProtocol:@protocol(UMEventEmitter)]) {
id<UMEventEmitter> eventEmitter = (id<UMEventEmitter>)exportedModule;
[eventsAccumulator addObjectsFromArray:[eventEmitter supportedEvents]];
}
}
return [eventsAccumulator allObjects];
}
RCT_EXPORT_METHOD(addProxiedListener:(NSString *)moduleName eventName:(NSString *)eventName)
{
[self addListener:eventName];
// Validate module
UMExportedModule *module = [UMModuleRegistry getExportedModuleForName:moduleName];
if (RCT_DEBUG && module == nil) {
UMLogError(@"Module for name `%@` has not been found.", moduleName);
return;
} else if (RCT_DEBUG && ![module conformsToProtocol:@protocol(UMEventEmitter)]) {
UMLogError(@"Module `%@` is not an UMEventEmitter, thus it cannot be subscribed to.", moduleName);
return;
}
// Validate eventEmitter
id<UMEventEmitter> eventEmitter = (id<UMEventEmitter>)module;
if (RCT_DEBUG && ![[eventEmitter supportedEvents] containsObject:eventName]) {
UMLogError(@"`%@` is not a supported event type for %@. Supported events are: `%@`",
eventName, moduleName, [[eventEmitter supportedEvents] componentsJoinedByString:@"`, `"]);
}
// Global observing state
_listenersCount += 1;
if (_listenersCount == 1) {
[self startObserving];
}
// Per-module observing state
int newModuleListenersCount = [self moduleListenersCountFor:moduleName] + 1;
if (newModuleListenersCount == 1) {
[eventEmitter startObserving];
}
_modulesListenersCounts[moduleName] = [NSNumber numberWithInt:newModuleListenersCount];
}
RCT_EXPORT_METHOD(removeProxiedListeners:(NSString *)moduleName count:(double)count)
{
[self removeListeners:count];
// Validate module
UMExportedModule *module = [UMModuleRegistry getExportedModuleForName:moduleName];
if (RCT_DEBUG && module == nil) {
UMLogError(@"Module for name `%@` has not been found.", moduleName);
return;
} else if (RCT_DEBUG && ![module conformsToProtocol:@protocol(UMEventEmitter)]) {
UMLogError(@"Module `%@` is not an UMEventEmitter, thus it cannot be subscribed to.", moduleName);
return;
}
id<UMEventEmitter> eventEmitter = (id<UMEventEmitter>)module;
// Per-module observing state
int newModuleListenersCount = [self moduleListenersCountFor:moduleName] - 1;
if (newModuleListenersCount == 0) {
[eventEmitter stopObserving];
} else if (newModuleListenersCount < 0) {
UMLogError(@"Attempted to remove more `%@` listeners than added", moduleName);
newModuleListenersCount = 0;
}
_modulesListenersCounts[moduleName] = [NSNumber numberWithInt:newModuleListenersCount];
// Global observing state
if (_listenersCount - 1 < 0) {
UMLogError(@"Attempted to remove more proxied event emitter listeners than added");
_listenersCount = 0;
} else {
_listenersCount -= 1;
}
if (_listenersCount == 0) {
[self stopObserving];
}
}
# pragma mark Utilities
- (int)moduleListenersCountFor:(NSString *)moduleName
{
NSNumber *moduleListenersCountNumber = _modulesListenersCounts[moduleName];
int moduleListenersCount = 0;
if (moduleListenersCountNumber != nil) {
moduleListenersCount = [moduleListenersCountNumber intValue];
}
return moduleListenersCount;
}
# pragma mark - UMModuleRegistryConsumer
- (void)setModuleRegistry:(UMModuleRegistry *)moduleRegistry
{
moduleRegistry = moduleRegistry;
}
@end
我对 Objective-c 知之甚少,所以任何帮助都非常感谢代码示例!
解决方案
推荐阅读
- sql - 将 SQL 查询转换为 JPQL - @ManyToMany 连接
- python - 为什么在“为简单的矢量化组件指定稀疏偏导数”视频中附加了一些变量?
- javascript - 从模板自动创建 PDF 文件
- ruby-on-rails - 删除 ActiveRecord[5.1] 上的索引,将 model_id 替换为 nil
- mongodb - 关于MongoDB修复的工作(选项、日志、进度等)
- azure - 我不断让用户登录失败。Azure SQL 中的错误 18456
- javascript - Elm:如何添加 onload div
- reactjs - React-redux 如何在 store 更新时更新组件 props
- python - 生成井字游戏ascii艺术的最佳方法
- python - Python Pandas 数据帧性能:索引数据帧中的范围选择与双重条件