在Monotouch中有一种方法如何从IntPtr获取ABPerson对象。我正在使用ABPeoplePickerNavigationController及其ABPeoplePickerNavigationControllerDelegate。我必须在方法ShouldContinue中阅读所选人员的一些属性。我的代码如下所示:
ABPeoplePickerNavigationController nc = new ABPeoplePickerNavigationController();
nc.Delegate = new CustomABPeoplePickerNavigationControllerDelegate();
我的自定义委托看起来像这样:
public class CustomABPeoplePickerNavigationControllerDelegate : ABPeoplePickerNavigationControllerDelegate
{
public override bool ShouldContinue (ABPeoplePickerNavigationController peoplePicker, IntPtr selectedPerson)
{
// *** HERE I HAVE TO GET ABPerson FROM IntPtr ***
peoplePicker.DismissModalViewControllerAnimated(false);
return true;
}
}
答案 0 :(得分:1)
可悲的是,接受IntPtr的ABPerson构造函数是MonoTouch的内部构造函数。你可以:
但你不能使用继承来解决这个问题,因为基数(ABRecord).ctor也是内部的。
我会看看为什么这个.ctor是内部的(afaik很多这样的。在MonoTouch中是公开的),如果可能的话(即如果没有其他选择),请为即将发布的版本修复此问题。
编辑:进一步阅读建议您在ABPeoplePickerNavigationController上使用SelectPerson事件。这将使用一个内部委托,将IntPtr转换为ABPerson实例,解决您的问题:)
答案 1 :(得分:0)
如果有效可行,但你可以:
ABPerson person = peoplePicker.AddressBook.SingleOrDefault(s => s.Handle == selectedPerson) as ABPerson;