2016-06-29 27 views
0

Hallo ich bin neu in der iOS-Entwicklung. Ich möchte einen Kontakt aus der Standard-Kontakte-App auswählen. Zu diesem Zweck habe ich eine Anwendung erstellt, mit der der Benutzer einen Kontakt aus der iPhone App für Standardkontakte auswählen kann. Für die Version iOS 9+ verwende ich den folgenden Ausschnitt.Wie verwendet man CNContactPickerViewController mit Ziel 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"); 
} 

Ich habe auch CNContactPickerDelegate Delegate in meinem uiviewcontroller hinzugefügt. Wenn ich den obigen Code ausführe, wird die Kontakt-App geöffnet. Wenn Sie jedoch auf einen Kontakt tippen, wird die App leer.

Vielen Dank im Voraus und können Sie bitte teilen Sie Ihr Wissen CNContactPickerViewController in Objective-C zu verwenden.

Antwort

-1

Kommentieren Sie die folgende Zeile und versuchen Sie es erneut.

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

Das Problem wird durch diesen Code verursacht:

contactPicker.displayedPropertyKeys = (NSArray *)CNContactGivenNameKey; 

Die displayedPropertyKeys ein NSArray erwartet die NSString Werte enthält. In Ihrem Code versuchen Sie, einen NSString in NSArray umzuwandeln und als Wert für diese Eigenschaft festzulegen.

Sie müssen Ihren Code ändern:

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 Verwendung oben Code für bestimmte Namen von Mehrfachauswahl zu holen,

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

versuchen diese seine adaequat für mich. – jeevan