0

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;
   }
}   
4

2 回答 2

1

遗憾的是,接受 IntPtr 的 ABPerson 构造函数在 MonoTouch 中是内部的。您可以:

  • 使用反射调用 .ctor
  • 使用另一个 API 来检索 ABPerson 实例

但是你不能使用继承来解决这个问题,因为基础 (ABRecord) .ctor 也是内部的。

我会看看为什么这个 .ctor 是内部的(afaik 许多这样的 .ctor 在 MonoTouch 中是公开的),如果可能的话(即如果没有替代品),为即将发布的版本修复这个问题。

编辑:进一步阅读建议您在 ABPeoplePickerNavigationController 上使用 SelectPerson 事件。这将使用一个内部委托,它将 IntPtr 转换为 ABPerson 实例,解决您的问题:)

于 2011-08-08T12:01:35.347 回答
0

没有尝试过,但你可以:

ABPerson person = peoplePicker.AddressBook.SingleOrDefault(s => s.Handle == selectedPerson) as ABPerson;
于 2011-08-08T09:16:04.433 回答