如何从地址簿中的联系人中选择生日标签?

时间:2016-03-15 11:40:14

标签: ios objective-c iphone

我使用Addressbook获取带有标签的联系人列表。 (如移动,主要,家庭,工作,传真......等)。我拿起了手机,给联系人发了电子邮件标签,但我没有拿到生日,周年纪念标签。这是我的生日课代码。

        ABMultiValueRef dateofbirth1 = ABRecordCopyValue(contactPerson, kABPersonBirthdayProperty);    // Assign the Date Of birth
         NSString *dob1=[NSDateFormatter localizedStringFromDate:(__bridge NSDate *)(dateofbirth1) dateStyle:NSDateFormatterLongStyle timeStyle:0];  // Changing to string format using Date Formatter.
          if(!(dob1==nil))
          {
              // DOB is Not Nill
           }

这是我获取BirthDay标签代码

             if([arrayOfDatesAsStrings count]>0)
                        {
                            for (int j = 0; j < [arrayOfDatesAsStrings count] ; j++)
                            {
   **//This is the fetching birthday label code and following code is crashed** 

                                CFStringRef locLabel1 = ABMultiValueCopyLabelAtIndex((__bridge ABMultiValueRef)(dob1), j);

                                NSString *phoneLabel1 =(__bridge NSString*) ABAddressBookCopyLocalizedLabel(locLabel1);

                                 personD.dateOfBirth = phone1;

                                NSLog(@" %@  %@",phoneLabel1,personD.dateOfBirth);

                            }
                        }
                        else
                        {
                            NSLog(@"Date Of Birth was Not set ");
                        }

我能为此做些什么?谁能帮我?崩溃错误消息是:     “线程1:Exc_BAD_ACCESS(代码= 1,地址= 0x38)”

1 个答案:

答案 0 :(得分:0)

从设备提取联系人

if (isIOS9) { //checking iOS version of Device

    CNContactStore *store = [[CNContactStore alloc] init];

    //keys with fetching properties
    NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactEmailAddressesKey,CNContactPostalAddressesKey, CNLabelWork, CNLabelDateAnniversary];

    NSString *containerId = store.defaultContainerIdentifier;

    NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
    NSError *error;
    NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];
    DLOG(@"cnContacts %lu",(unsigned long)cnContacts.count);

    if (error) {
        //error
    } else {

        for (CNContact *contact in cnContacts) {

            //iterate over cnContacts to get details
        }

    }

} else {

    //for below iOS 9
    ABAddressBookRef addressBook = ABAddressBookCreate();

    CFArrayRef arrPersons = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex count = ABAddressBookGetPersonCount(addressBook);
    NSLog(@"cnContacts %lu",(unsigned long)count);

    for (int i = 0; i < count; i++) {

        ABRecordRef record = CFArrayGetValueAtIndex(arrPersons,i);

        //use kABPersonBirthdayProperty to get b’day
        NSString *birthDay = (__bridge NSString *)(ABRecordCopyValue(record, kABPersonBirthdayProperty));
        NSLog(@“B’day %@”, birthDay);
    }

}