Я пытаюсь быть ABRecordRef, который представляет контактную информацию человека из адресной книги. Я построил две функции, которые вызывают функцию для заполнения структуры персональных данных информацией в ABRecordRef.
А вот и объявления функций для трех функций:
+ (NSMutableArray*) getAllContactProfiles{
NSMutableArray *listOfProfile = [[NSMutableArray alloc] init];
//---get the contact information for the api
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex numberOfPeopleInAddressBook = ABAddressBookGetPersonCount(addressBook);
//<- Here I loop through all the contacts and pass the ABRecordRef into the following function
//---release the variables---
CFRelease(addressBook);
CFRelease(people);
[listOfProfile autorelease];
return listOfProfile;
}
Следующая функция
+ (MSProfileEntry*) getPersonProfileThroughABRecordRef:(ABRecordRef) person{
MSProfileEntry *mockProfile;
ABRecordID recID=ABRecordGetRecordID(person);
//get the user name
CFStringRef firstName;
firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);//it goes wrong here!
CFStringRef lastName;
lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
//bla bla bla.. the rest of the code
}
Все идет очень хорошо. Однако, когда я пытаюсь получить ABRecordRef через ABAddressBookGetPersonWithRecordID, как в следующем методе:
Следующий метод
+ (MSProfileEntry*) getPersonProfileThroughContactId:(NSInteger*)contactId{
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef person =
ABAddressBookGetPersonWithRecordID(addressBook, (ABRecordID)contactId);
CFRelease(addressBook);
if (person == nil) {
return nil;
}
return [MSContactUtil getPersonProfileThroughABRecordRef:person];
}
Все приложение вылетает на линии: ABRecordCopyValue(person, kABPersonFirstNameProperty);
.
Проблема в том, что ABRecordCopyValue(person, kABPersonFirstNameProperty);
прекрасно работает с ABAddressBookCopyArrayOfAllPeople
, но вызывает сбой приложения с ABAddressBookGetPersonWithRecordID
.
Кто-нибудь знает, как решить эту проблему? Я действительно не хочу перебирать всю базу контактов, просто чтобы найти контакт.