iPhone のアドレス帳で重複する電話番号を取得しようとしています。本当に時間がかかるという私の問題は、iPhoneで264回の連絡があり、プロセスに16秒かかります!!! 私はiTunesからアプリを購入しましたが、同じプロセスを時間がかかりませんでした。だから私は私のアプローチが間違っていると信じています。Xcode では NSPredicate を使用する必要があることを知っています。私はC#述語でそれをやろうとしましたが、同じ結果です。以下は、重複した電話番号を取得するための私のコードです:
ABAddressBook ab = new ABAddressBook ();
OrderedDictionary persons = new OrderedDictionary ();
foreach (ABPerson p in ab.GetPeople()) {
foreach (var phoneNumber in p.GetPhones().GetValues()) {
var duplicates = SearchByPhoneNumber (ab, phoneNumber);
if (duplicates.Count > 1) {
if (!persons.Contains (phoneNumber)) {
persons.Add (phoneNumber, duplicates);
}
}
}
}
private List<ABPerson> SearchByPhoneNumber ( ABAddressBook ab, string phoneNumber)
{
List<ABPerson> duplicatepeople = new List<ABPerson> ();
phoneNumber = Regex.Replace (phoneNumber, "[^0-9]", "");
var people = ab.Where(x=> x is ABPerson).Cast<ABPerson>()
.Where((e)=> { return (e.GetPhones().Any((p)=>{return (Regex.Replace(p.Value,"[^0-9]", "")==phoneNumber); }));}).ToList ();
return people;
}