我目前在表格视图中有一个按钮。我有自定义单元格类和更新单元格方法。
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。
答案 0 :(得分:3)
试试这个:
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模拟器中模拟电话,否则只需连接您的设备: - )
答案 1 :(得分:3)
如其他答案中所述,NSUrl
无法处理URL字符串中的空格(以及其他一些符号)。在传递给NSUrl
构造函数之前,应对这些符号进行编码。您可以使用NSString.CreateStringByAddingPercentEscapes
方法进行编码。
另一种方法是使用.NET Uri
类:
new NSUrl(new Uri("tel:" + subtitle2).AbsoluteUri)
您可能遇到的问题是Uri
类解析模式。为避免这种情况,请不要使用://
,因此,网址字符串应显示为"tel:(123) 345-7890"
,而不是"tel://(123) 345-7890"
答案 2 :(得分:2)
尝试
UIApplication.SharedApplication.OpenUrl(new NSUrl("tel://" + subtitle2));
答案 3 :(得分:2)
此错误表示调用initWithString:
已返回nil
。 ObjC init*
方法可以返回nil
,而.NET构造函数可以返回(和抛出)。
通常,当输入参数无效时,ObjC会在nil
选择器上返回init*
。在这种情况下,我怀疑您的网址格式无效。
您的subtitle2
变量的内容是什么?
答案 4 :(得分:2)
我在尝试了各种方法之后,通过最终确定在数字之间不应该有任何空格(而不是1800 111 222 333
,应该像1800111222333
)来解决相同的问题的iOS。
number = number.Replace(" ", "");
NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", number));
return UIApplication.SharedApplication.OpenUrl(url);