В моем приложении мне нужно получить определенные свойства контактов пользователей. Например, мне нужно получить имя контакта, фамилию, отчество, псевдоним, организацию, должность, отдел, день рождения, адрес электронной почты и т. д. У меня есть несколько методов для получения этих свойств, и только пара работает, хотя все они очень похожи. Вот мой код для одного работающего метода (имя) и другого метода (название должности):
+(NSString *)fetchFirstnameForPersonID: (NSUInteger)identifier{
NSString *firstName;
ABRecordRef currentPerson = (__bridge ABRecordRef)[[PSAddressBook arrayOfContacts] objectAtIndex:identifier];
//If the first name property exists
if ((__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty) != NULL){
firstName = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty);
}
//If the first name property does not exist
else{
firstName = @"NULL";
}
return firstName;
}
+(NSString *)fetchJobTitleForPersonID: (NSUInteger)identifier{
NSString *jobTitle;
ABRecordRef currentPerson = (__bridge ABRecordRef)[[PSAddressBook arrayOfContacts] objectAtIndex:identifier];
if ((__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonJobTitleProperty) != NULL){
jobTitle = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonJobTitleProperty);
}
else{
jobTitle = @"NULL";
}
return jobTitle;
}
arrayOfContacts
— это метод класса, определенный следующим образом:
+(NSArray *)arrayOfContacts{
//Creates an ABAddressBookRef instance containing the data from the address book database
ABAddressBookRef addressBook = ABAddressBookCreate();
//Creates an NSArray from the CFArrayRef using toll-free bridging
NSArray *arrayOfPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);
return arrayOfPeople;
}
Эти методы определены в классе модели PSPropertyFetcher. В моем корневом контроллере представления я поместил несколько операторов NSLog в viewDidLoad, чтобы проверить, правильно ли работают методы извлечения свойств. Вот мой код для тестов:
NSLog(@"Property Fetchers Test\n");
for(NSUInteger i = 0; i <= ([PSAddressBook contactsCount]-1); i++){
NSLog(@"First Name: %@", [PSPropertyFetcher fetchFirstnameForPersonID:i]);
NSLog(@"Middle Name: %@", [PSPropertyFetcher fetchMiddlenameForPersonID:i]);
NSLog(@"Last Name: %@", [PSPropertyFetcher fetchLastnameForPersonID:i]);
NSLog(@"Organization: %@", [PSPropertyFetcher fetchOrganizationForPersonID:i]);
NSLog(@"Department: %@", [PSPropertyFetcher fetchDepartmentForPersonID:i]);
NSLog(@"Job Title: %@\n\n", [PSPropertyFetcher fetchJobTitleForPersonID:i]);
}
Это работает только частично; это вывод:
2012-06-27 10:37:30.094 Угадай, кто![80103:f803] Тест сборщиков свойств
2012-06-27 10:37:30.108 Угадай, кто![80103:f803] Имя: Джод
2012-06-27 10:37:30.114 Угадай, кто![80103:f803] Отчество: Боб
2012-06-27 10:37:30.118 Угадай, кто![80103:f803] Фамилия: Сатсон
2012-06-27 10:37:30.122 Угадай, кто![80103:f803] Организация: Джонсон и Джонсон
2012-06-27 10:37:30.125 Угадай, кто![80103:f803] Отдел: NULL
2012-06-27 10:37:30.128 Угадай, кто![80103:f803] Должность: NULL
2012-06-27 10:37:30.136 Угадай, кто![80103:f803] Имя: Шемайран
2012-06-27 10:37:30.166 Угадай, кто![80103:f803] Второе имя: Дайтран
2012-06-27 10:37:30.179 Угадай, кто![80103:f803] Фамилия: Катаран
2012-06-27 10:37:30.184 Угадай, кто![80103:f803] Организация: Шмайро и Ко.
2012-06-27 10:37:30.188 Угадай, кто![80103:f803] Отдел: NULL
2012-06-27 10:37:30.193 Угадай, кто![80103:f803] Должность: NULL
2012-06-27 10:37:30.202 Угадай, кто![80103:f803] Имя: Алекс
2012-06-27 10:37:30.207 Угадай, кто![80103:f803] Второе имя: Джон
2012-06-27 10:37:30.213 Угадай, кто![80103:f803] Фамилия: Кукуруза
2012-06-27 10:37:30.219 Угадай, кто![80103:f803] Организация: Apple
2012-06-27 10:37:30.225 Угадай, кто![80103:f803] Отдел: NULL
2012-06-27 10:37:30.230 Угадай, кто![80103:f803] Должность: NULL
В приложении iOS Simulator Contacts я обязательно заполнил каждое поле для каждого контакта, но по какой-то причине поля «Отдел» и «Должность» печатаются неправильно.
По сути, мне интересно, что не так с моими методами получения названия должности и отдела.
Заранее спасибо!
[self arrayOfContacts]
? Если это просто недвижимость, то где она заселена? - person Alexis King   schedule 26.06.2012arrayOfContacts
- person pasawaya   schedule 26.06.2012