簡體   English   中英

如何在目標C中使用CNContactPickerViewController?

[英]How to use CNContactPickerViewController with objective c?

嗨,我是iOS開發的新手。 我想從默認聯系人應用程序中選擇一個聯系人。 為此,我創建了一個應用程序,允許用戶從iPhone默認聯系人應用程序中選擇聯系人。 對於iOS 9+版本,我正在使用以下內容。

- (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");
}

我還在uiviewcontroller中添加了CNContactPickerDelegate委托。 當我執行上述代碼時,它將打開聯系人應用程序,但是當點擊聯系人時,該應用程序將變為空白。

在此先感謝您,任何人都可以分享您的知識,以便在Objective-C中使用CNContactPickerViewController。

該問題是由以下代碼引起的:

contactPicker.displayedPropertyKeys = (NSArray *)CNContactGivenNameKey;

displayedPropertyKeys期待一個NSArray包含NSString值。 在您的代碼中,您嘗試將NSString類型轉換為NSArray並將其設置為該屬性的值。

您需要將代碼更改為:

contactPicker.displayedPropertyKeys = @[CNContactGivenNameKey];
#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];

}
-(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使用上面的代碼從多個選擇中獲取給定名稱,

評論以下行,然后重試。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM