在我的應用程序中,我必須檢索用戶聯繫人的某些屬性。例如,我需要檢索聯繫人的名字,姓氏,中間名,暱稱,組織,職位,部門,生日,電子郵件等。我有一些方法來檢索這些屬性,並且只有幾個工作,即使他們都非常相似。這裏是我的一個方法,在工作(名字)和一個代碼,沒有(職務):ABRecordCopyValue()EXC_BAD_ACCESS錯誤
+(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」的模型類中定義。在我的根視圖控制器中,我在viewDidLoad中放置了一些NSLog語句,以查看屬性fetcher方法是否正常工作。這裏是我的測試代碼:
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]名字:時Jod
2012-06-27 10:37:30.114猜猜我是誰[80103:F803]中名:鮑勃
2012-06-27 10:37:30.118猜猜我是誰![80103:f803]姓:Satson
2012-06-27 10:37:30.122猜猜誰![80103:f803] Orga nization:強生公司
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]名字:Shemairan
2012-06-27 10: 37:30.166猜猜誰![80103:f803]中間名:Daitran
2012-06-27 10:37:30.179猜猜我是誰![80103:F803]姓:Catairan
2012-06-27 10:37:30.184猜猜我是誰[80103:F803]!組織: Shmairo和公司
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]組織:蘋果
2012-06-27 10:37 :30.225猜猜我是誰![80103:F803科]:NULL
2012-06-27 10:37:30.230猜猜我是誰![80103:F803]職位名稱:NULL
在iPhone模擬器聯繫人應用程序中,我確保爲每個聯繫人填寫每個字段,但出於某種原因,「部門」和「職位」字段未正確打印。
基本上,我想知道我的「職位」和「部門」提取方法有什麼問題。
在此先感謝!
我們可以看到'[self arrayOfContacts]'的實現嗎?如果它只是一個屬性,它在哪裏填充? –
@JakeKing我更新了問題以顯示'arrayOfContacts' – pasawaya