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 が内部である理由を調べ (そのような .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 に答える