【问题标题】:Understanding how delegate is going to get trigger in a code了解委托将如何在代码中触发
【发布时间】:2021-09-24 01:04:48
【问题描述】:

我正在浏览 Jitsi Meet 代码,他们为他们的 UIView 创建了一个delegate

Their Delegate class

JitsiMeetView Where they are using it

考虑到他们有这个委托

- (void)audioMutedChanged:(NSDictionary *)data;

他们在view controller中实现了这些

- (void)audioMutedChanged:(NSDictionary *)data {
  NSLog(@"%@%@", @"Audio muted changed: ", data[@"muted"]);
}

我无法弄清楚audioMutedChanged 将如何被调用

有人可以帮我理解他们的代码吗?

【问题讨论】:

  • 在他们的 SDK 中调用该方法。在某个地方,当它检测到静音时可能会有一些东西:if ([delegate respondsToSelector:@selector(audioMuteDidChanged:)]) { [delegate audioMutedChanged:someDictionary];}。它是隐藏代码,就像调用 UITableViewDelegate 方法或任何其他委托一样。

标签: ios objective-c xcode react-native


【解决方案1】:

你可以看看JitsiMeetView.m里面的实现,它有以下方法。

- (void)setAudioMuted:(BOOL)muted {
    ExternalAPI *externalAPI = [[JitsiMeet sharedInstance] getExternalAPI];
    [externalAPI sendSetAudioMuted:muted];
}

如果你看一下ExternalAPI.m 内部的实现,你会看到这个。

- (void)sendSetAudioMuted:(BOOL)muted {
    NSDictionary *data = @{ @"muted": [NSNumber numberWithBool:muted]};

    [self sendEventWithName:setAudioMutedAction body:data];
}

这是调用委托回调的最后一个地方。

RCT_EXPORT_METHOD(sendEvent:(NSString *)name
                       data:(NSDictionary *)data
                      scope:(NSString *)scope) {
    // The JavaScript App needs to provide uniquely identifying information to
    // the native ExternalAPI module so that the latter may match the former
    // to the native JitsiMeetView which hosts it.
    JitsiMeetView *view = [JitsiMeetView viewForExternalAPIScope:scope];

    if (!view) {
        return;
    }

    id delegate = view.delegate;

    if (!delegate) {
        return;
    }
    
    if ([name isEqual: @"PARTICIPANTS_INFO_RETRIEVED"]) {
        [self onParticipantsInfoRetrieved: data];
        return;
    }

    SEL sel = NSSelectorFromString([self methodNameFromEventName:name]);

    if (sel && [delegate respondsToSelector:sel]) {
        [delegate performSelector:sel withObject:data];
    }
}

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多