Xamarin.ios 如何在MonoTouch中使用ABPeoplePickerNavigationController来选择联系人的特定电子邮件地址或电话号码?
我在一个项目中使用MonoTouch编写的,来选择联系人的特定电子邮件地址或电话号码 代码设置了一个委托,在委托中我实现了ShouldContinue方法,并使用所有联系人的Handle属性检索了联系人。不幸的是,它看起来有些变化,或者我使用了未记录的功能,或者我很幸运,因为现在当我在为iPhone 5更新应用程序时,代码不再工作 编辑:好的,我最初的想法是这是由MonoTouch的更改引起的,因为自从我上次使用这个应用程序以来,已经有很多更新。然而,我现在从我的设备上删除了它,并下载了我在应用商店上的版本,它以同样的方式崩溃,空引用异常 这意味着是iOS升级导致我的代码无法正常工作 我的代码的目标是:Xamarin.ios 如何在MonoTouch中使用ABPeoplePickerNavigationController来选择联系人的特定电子邮件地址或电话号码?,xamarin.ios,addressbook,Xamarin.ios,Addressbook,我在一个项目中使用MonoTouch编写的,来选择联系人的特定电子邮件地址或电话号码 代码设置了一个委托,在委托中我实现了ShouldContinue方法,并使用所有联系人的Handle属性检索了联系人。不幸的是,它看起来有些变化,或者我使用了未记录的功能,或者我很幸运,因为现在当我在为iPhone 5更新应用程序时,代码不再工作 编辑:好的,我最初的想法是这是由MonoTouch的更改引起的,因为自从我上次使用这个应用程序以来,已经有很多更新。然而,我现在从我的设备上删除了它,并下载了我在应用
var picker = new ABPeoplePickerNavigationController();
picker.Init();
picker.DisplayedProperties.Clear();
picker.DisplayedProperties.Add(ABPersonProperty.FirstName);
picker.DisplayedProperties.Add(ABPersonProperty.Phone);
var del = new PhonePickerDelegate();
picker.Delegate = del;
下面是委托类:
private class PhonePickerDelegate : ABPeoplePickerNavigationControllerDelegate
{
public override bool ShouldContinue(ABPeoplePickerNavigationController peoplePicker, IntPtr selectedPerson, int propertyId, int identifier)
{
peoplePicker.DismissModalViewControllerAnimated(true);
// THE NEXT LINE IS THE ONE THAT NO LONGER WORKS
var contact = peoplePicker.AddressBook.SingleOrDefault(s => s.Handle == selectedPerson) as ABPerson;
using (var phones = contact.GetPhones())
{
int index = phones.GetIndexForIdentifier(identifier);
var phone = phones.GetValues()[index];
var name = (contact.FirstName + " " + contact.MiddleName).Trim() + " " + contact.LastName;
Selected(name + ": " + phone);
}
return false;
}
public override void Cancelled(ABPeoplePickerNavigationController peoplePicker)
{
peoplePicker.DismissModalViewControllerAnimated(true);
}
}
不幸的是,此代码不再找到正确的联系人,因为没有一个联系人的句柄值与selectedPerson
IntPtr
值对应
我的问题是:
您可以执行以下操作: 请注意,AppDelegate.navigation将是您当前的
NavigationController
e.Person
只会给你整个联系人。您可能希望执行以下操作:
e.Person.GetEmails().FirstOrDefault
希望这有帮助定义了
peoplePicker
的位置?DismissModalViewController已替换为DismissViewController
e.Person.GetEmails().FirstOrDefault