【问题标题】:Make a phonecall ios xamarin拨打电话 ios xamarin
【发布时间】:2014-08-01 14:05:46
【问题描述】:

我目前在表格视图中有一个按钮。我有一个自定义单元格类和一个更新单元格方法。

public void UpdateCell (string subtitle2)
{               
    call.SetTitle(subtitle2, UIControlState.Normal);
    call.TouchUpInside += (object sender, EventArgs e) => {
        UIApplication.SharedApplication.OpenUrl(new NSUrl("tel:" + subtitle2));
    };          
}

但是,当我运行这段代码时,我得到了一个错误。

无法初始化该类型的实例 'MonoTouch.Foundation.NSUrl':原生 'initWithString:' 方法 返回零。可以通过设置忽略此条件 MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure 为 false。

【问题讨论】:

    标签: c# ios uitableview xamarin.ios xamarin


    【解决方案1】:

    试试这个:

    public void UpdateCell (string subtitle2)
    {
        //Makes a new NSUrl
        var callURL = new NSUrl("tel:" + subtitle2);
    
        call.SetTitle(subtitle2, UIControlState.Normal);
        call.TouchUpInside += (object sender, EventArgs e) => {
        if (UIApplication.SharedApplication.CanOpenUrl (callURL)) {
        //After checking if phone can open NSUrl, it either opens the URL or outputs to the console.
    
            UIApplication.SharedApplication.OpenUrl(callURL);
        } else {
        //OUTPUT to console
    
        Console.WriteLine("Can't make call");
        }
      };          
    }
    

    不确定是否可以在 iPhone 模拟器中模拟电话,否则只需连接您的设备 :-)

    【讨论】:

      【解决方案2】:

      如其他答案中所述,NSUrl 无法处理 URL 字符串中的空格(和其他一些符号)。该符号应该在传递给NSUrl 构造函数之前进行编码。您可以使用NSString.CreateStringByAddingPercentEscapes 方法进行编码。 另一种方法是使用 .NET Uri 类:

      new NSUrl(new Uri("tel:" + subtitle2).AbsoluteUri)
      

      您可能在此处遇到的问题是 Uri 类解析模式。为避免这种情况,请勿使用://,因此,URL 字符串应为"tel:(123) 345-7890",而不是"tel://(123) 345-7890"

      【讨论】:

        【解决方案3】:

        试试

        UIApplication.SharedApplication.OpenUrl(new NSUrl("tel://" + subtitle2));
        

        【讨论】:

        • 它仍然给我同样的错误无法初始化“MonoTouch.Foundation.NSUrl”类型的实例:本机“initWithString:”方法返回 nil。可以通过将 MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure 设置为 false 来忽略此条件。
        【解决方案4】:

        这个错误意味着调用initWithString:返回nil。 ObjC init* 方法可以返回 nil 而 .NET 构造函数不能(并抛出)。

        通常,当输入参数无效时,ObjC 在init* 选择器上返回nil。在这种情况下,我怀疑您的 URL 格式无效。

        subtitle2 变量的内容是什么?

        【讨论】:

        • 我的格式是 (###) ###-####。它只接受##########
        • 这是一个很好的解释“为什么”得到的异常有点令人困惑。
        【解决方案5】:

        在尝试了各种方法后,我解决了同样的问题,最终确定在 iOS 中拨打电话的号码之间不应该有任何空格(而不是 1800 111 222 333,应该像 1800111222333)。

        number = number.Replace(" ", "");
        
        NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", number));
        return UIApplication.SharedApplication.OpenUrl(url);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-14
          • 1970-01-01
          • 2017-12-21
          • 1970-01-01
          • 1970-01-01
          • 2019-01-05
          相关资源
          最近更新 更多