在我的应用程序中,我必须检索用户联系人的某些属性。例如,我需要检索联系人的名字、姓氏、中间名、昵称、组织、职位、部门、生日、电子邮件等。我有一些方法可以检索这些属性,但只有几个工作,即使它们都非常相似。这是我的一种有效方法(名字)和一种无效方法(职位)的代码:
+(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] 职位:空
2012-06-27 10:37:30.136 猜猜谁![80103:f803] 名字:Shemailan
2012-06-27 10:37:30.166 猜猜谁![80103:f803] 中间名:Daitran
2012-06-27 10:37:30.179 猜猜谁![80103:f803] 姓:卡泰兰
2012-06-27 10:37:30.184 猜猜是谁![80103:f803] 组织:Shmairo and Co.
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] 名字:Alex
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] 组织:苹果
2012-06-27 10:37:30.225 猜猜谁![80103:f803] 部门:NULL
2012-06-27 10:37:30.230 猜猜谁![80103:f803] 职位名称:NULL
在 iOS Simulator Contacts 应用程序中,我确保为每个联系人填写了每个字段,但由于某种原因,“部门”和“职位”字段没有正确打印。
基本上,我想知道我的“职位”和“部门”获取方法有什么问题。
提前致谢!