Как получить номера телефонов CNContact в виде строки в Xamarin. ios? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь получить имена и номера телефонов всех контактов и показать их в виде таблицы в Xamarin. iOS. Я сделал это так далеко:

 var response = new List<ContactVm>();
            try
            {
                //We can specify the properties that we need to fetch from contacts  
                var keysToFetch = new[] {
            CNContactKey.PhoneNumbers, CNContactKey.GivenName, CNContactKey.FamilyName, CNContactKey.EmailAddresses
            };
                //Get the collections of containers  
                var containerId = new CNContactStore().DefaultContainerIdentifier;
                //Fetch the contacts from containers  
                using (var predicate = CNContact.GetPredicateForContactsInContainer(containerId))
                {
                    CNContact[] contactList;
                    using (var store = new CNContactStore())
                    {
                        contactList = store.GetUnifiedContacts(predicate, keysToFetch, out
                            var error);
                    }
                    //Assign the contact details to our view model objects  
                    response.AddRange(from item in contactList
                                      where item?.EmailAddresses != null
                                      select new ContactVm
                                      {
                                          PhoneNumbers =item.PhoneNumbers,
                                          GivenName = item.GivenName,
                                          FamilyName = item.FamilyName,
                                          EmailId = item.EmailAddresses.Select(m => m.Value.ToString()).ToList()
                                      });



                }


                BeginInvokeOnMainThread(() =>
                {
                    tblContact.Source = new CustomContactViewController(response);
                    tblContact.ReloadData();

                });
            }

            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

, и это мой метод обновления ячейки

 internal void updateCell(ContactVm contact)
        {
            try
            {

                lblName.Text = contact.GivenName;
                lblContact.Text = ((CNPhoneNumber)contact.PhoneNumbers[0]).StringValue;

                //var no = ((CNPhoneNumber)contact.PhoneNumbers[0]).StringValue;
                //NSString a = new NSString("");
                // var MobNumVar = ((CNPhoneNumber)contact.PhoneNumbers[0]).ValueForKey(new NSString("digits")).ToString();

                var c = (contact.PhoneNumbers[0] as CNPhoneNumber).StringValue;
            }
            catch(Exception ex)
            {
                throw ex;
            }


        }

Я хотел бы знать, как получить просто номер телефона (ов) в виде строки значения (значения), т. е. "XXXXXXXXXX". В основном, как вызвать значение di git (s). эта строка кода

lblContact.Text = ((CNPhoneNumber)contact.PhoneNumbers[0]).StringValue;

выдает исключение времени выполнения, поскольку указанное приведение недействительно

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Я получил решение. Вот мой код, если он требуется.

CNLabeledValue<CNPhoneNumber> numbers = 
  (Contacts.CNLabeledValue<Contacts.CNPhoneNumber>)contact.PhoneNumbers[0];
                CNPhoneNumber number = numbers.Value;
                string str = number.StringValue;
                lblContact.Text = str;
0 голосов
/ 28 января 2020

Да, исключение верно. Прежде всего, вам не нужны никакие приведения. не уверен, что это работает

contact.PhoneNumbers[0].Value.StringValue
...