2016-06-29 1 views
0

Привет, я новичок в разработке iOS. Я хочу выбрать контакт из приложения контактов по умолчанию. Для этого я создал приложение, которое позволяет пользователю выбирать контакт из приложения контактов по умолчанию iPhone. Для версии iOS 9+ я использую следующий снимок.Как использовать CNContactPickerViewController с объективом c?

- (IBAction)btnAction:(id)sender { 

    CNContactPickerViewController *contactPicker = [[CNContactPickerViewController alloc] init]; 

    contactPicker.delegate = self; 
    contactPicker.displayedPropertyKeys = (NSArray *)CNContactGivenNameKey; 

    [self presentViewController:picker animated:YES completion:nil]; 
} 

-(void) contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{ 
    NSLog(@"Contact : %@",contact); 
} 

-(void)contactPickerDidCancel:(CNContactPickerViewController *)picker { 
    NSLog(@"Cancelled"); 
} 

Я также добавил делегат CNContactPickerDelegate в мой uiviewcontroller. Когда я выполняю вышеуказанный код, он открывает приложение для контактов, но при нажатии на контакт приложение становится пустым.

Заранее благодарим, и кто-нибудь может поделиться своими знаниями, чтобы использовать CNContactPickerViewController в Objective-C.

ответ

-1

прокомментируйте следующую строку и повторите попытку.

//contactPicker.displayedPropertyKeys = (NSArray *)CNContactGivenNameKey; 
6

Проблема вызвана этим кодом:

contactPicker.displayedPropertyKeys = (NSArray *)CNContactGivenNameKey; 

displayedPropertyKeys ожидает NSArray, который содержит NSString значения. В вашем коде вы пытаетесь ввести приведение NSString в NSArray и установить значение этого свойства.

Вы должны изменить свой код:

contactPicker.displayedPropertyKeys = @[CNContactGivenNameKey]; 
0
-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact *> *)contacts{ 

    NSLog(@" %@",contacts); 

    CNContact *contact=[contacts objectAtIndex:0]; 

    NSLog(@"name = %@",contact.givenName); 


} 

[1]: https://i.stack.imgur.com/9Sp1G.png использование выше кода для для извлечения заданного имени из нескольких выборов,

2
#pragma mark - CNContactPickerViewController Delegate method implementation 
(void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact 
{ 
    NSMutableArray *contactNumberArray = [[NSMutableArray alloc]init]; 
    selectedName=[NSString stringWithFormat:@"%@",contact.givenName]; 
    NSLog(@"%@",selectedName); 
    NSString *tempString = [NSString stringWithFormat:@"name : %@ %@ %@\n",contact.givenName, contact.familyName, contact.organizationName]; 
    // // 1. (Phone Numbers) 
     tempString = [NSString stringWithFormat:@"%@phoneNumbers : ",tempString]; 
     // NSArray*phoneNumber = contact.phoneNumbers; 
     for (CNLabeledValue *phoneNumber in contact.phoneNumbers) 
     { 
      CNPhoneNumber *phone = phoneNumber.value; 
      tempString = [NSString stringWithFormat:@"%@<%@>",tempString,phone.stringValue]; 
      [contactNumberArray addObject:phone]; 
      selectedPhNumber=[[NSString stringWithFormat:@"%@",phone.stringValue] stringByReplacingOccurrencesOfString:@" " withString:@""]; 
      NSLog(@"%@",selectedPhNumber); 
     } 

     //2. (Emails) 
     tempString = [NSString stringWithFormat:@"%@\n Email : ",tempString]; 
     for (CNLabeledValue *email in contact.emailAddresses) 
     { 
      selectedEmail=[NSString stringWithFormat:@"%@", email.value]; 
      tempString = [NSString stringWithFormat:@"%@<%@>",tempString,email.value]; 
       [contactNumberArray addObject:email]; 
      NSLog(@"%@",selectedEmail); 
     } 
[self sendRefferelDetailsToServer]; 

} 
+0

попробовать это его работает отлично для меня. – jeevan

Смежные вопросы