Xamarin.Forms/iOS,出现异常,“You_Should_Not_Call_Base_In_This_Method”?

Posted

技术标签:

【中文标题】Xamarin.Forms/iOS,出现异常,“You_Should_Not_Call_Base_In_This_Method”?【英文标题】:Xamarin.Forms/iOS, got exception, "You_Should_Not_Call_Base_In_This_Method"? 【发布时间】:2017-03-08 06:45:05 【问题描述】:

我有一个 Xamarin.Forms 项目,并实现了第三方服务,android 部分几乎完美,但 ios 部署不断抛出异常。我完全不知道这个异常,因为在代码中我在方法调用中得到了所有的返回值。所以,我想知道什么是“基地”,我应该检查哪个地方?

这是一个例外:

这是引发异常的代码部分:

void Join_Clicked(object sender, System.EventArgs e)

    String channelName = this.Room_Name_Entry.Text;
    if (channelName != null)
    
        if (myEngine.AgoraJoinChannel(channelName) == 0)
        
            this.VoiceStatus.Text = "You are in the channel!";
            this.VoiceStatus.IsVisible = true;
            this.Room_Join_Button.IsEnabled = false;
        
        else
        
            this.VoiceStatus.Text = "You are not in the channel!";
            this.VoiceStatus.IsVisible = true;
        
    
    else
    
        this.VoiceStatus.Text = "Please set the room's name!";
        this.VoiceStatus.IsVisible = true;
    

这是特定于平台的实现:

using System;
using DT.Xamarin.Agora;
using TabbedPageTest.iOS;

[assembly: Xamarin.Forms.Dependency(typeof(AgoraVoiceImplement_iOS))]
namespace TabbedPageTest.iOS

    public class AgoraVoiceImplement_iOS : IAgora
    
        AgoraRtcEngineKit myEngine;
        AgoraRtcEngineDelegate myDelegate;

        public AgoraVoiceImplement_iOS()
        
            myDelegate = new AgoraRtcEngineDelegate();
            myEngine = AgoraRtcEngineKit.SharedEngineWithAppIdAndDelegate("6de68f576fda42ca92a791b38383fee8", myDelegate);
        

        public int AgoraJoinChannel(string Channel_Name)
        
            myEngine.SetChannelProfile(AgoraRtcChannelProfile.Communication);
            return myEngine.JoinChannelByKey(null, Channel_Name, "", 0, (Foundation.NSString arg1, nuint arg2, nint arg3) =>
            
                myDelegate.DidJoinChannel(myEngine, arg1, arg2, arg3);
            );
        

        public int AgoraLeaveChannel()
        
            return myEngine.LeaveChannel((AgoraRtcStats obj) =>
            
                myDelegate.DidLeaveChannelWithStats(myEngine, obj);
            );
        
    

非常感谢!

【问题讨论】:

打破异常。查看调用堆栈。查看调用 base 的位置。可能在您的一位代表中。 【参考方案1】:

您的代码中某处有一个委托,它为该委托基实现接口/类,并调用基类实现。

Xamarin SDK 具有委托基类的概念(由于 C# 特性),但在带有协议的实际 IOS SDK ObjC 上却不是这样。因此 Xamarin 添加了此异常以在执行时对其进行标记,以查找将实现留空或添加自定义代码以处理委托回调的位置。

在代码中搜索或在调试器中添加 Break On Exception,一旦调用它将停止。

【讨论】:

以上是关于Xamarin.Forms/iOS,出现异常,“You_Should_Not_Call_Base_In_This_Method”?的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin Forms iOS 中出现 ListView 之前,如何将 ListView 滚动位置设置为底部?

更新到 Xcode 11.3.1 后,在 Xamarin Forms iOS 项目中出现错误“无法解析 AuthenticationServices.IASAuthorizationControlle

Xamarin Forms - iOS 上的键盘覆盖条目(文本字段)

Xamarin.Forms iOS 模拟器为 Facebook 审查构建

Xamarin Forms - iOS - 后退按钮标题

Xamarin.Forms IOS 断点未命中