私のアプリでは、ユーザーの連絡先の特定のプロパティを取得する必要があります。たとえば、連絡先の名、姓、ミドル ネーム、ニックネーム、組織、役職、部署、誕生日、電子メールなどを取得する必要があります。それらはすべて非常に似ています。これは、機能しているメソッド (名) と機能していないメソッド (役職) のコードです。
+(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 Guess Who![80103:f803] プロパティ フェッチャー テスト
2012-06-27 10:37:30.108 Guess Who![80103:f803] 名: Jod
2012-06-27 10:37:30.114 Guess Who![80103:f803] ミドルネーム: ボブ
2012-06-27 10:37:30.118 Guess Who![80103:f803] 姓: サトソン
2012-06-27 10:37:30.122 Guess Who![80103:f803] 組織: ジョンソン アンド ジョンソン
2012-06-27 10:37:30.125 ゲス・フー![80103:f803] 部門: NULL
2012-06-27 10:37:30.128 Guess Who![80103:f803] 役職: NULL
2012-06-27 10:37:30.136 Guess Who![80103:f803] 名: Shemairan
2012-06-27 10:37:30.166 Guess Who![80103:f803] ミドルネーム: Daitran
2012-06-27 10:37:30.179 Guess Who![80103:f803] 姓: Catairan
2012-06-27 10:37:30.184 Guess Who![80103:f803] 組織: Shmairo and Co.
2012-06-27 10:37:30.188 Guess Who![80103:f803] 部門: NULL
2012-06-27 10:37:30.193 Guess Who![80103:f803] 役職: NULL
2012-06-27 10:37:30.202 Guess Who![80103:f803] 名: アレックス
2012-06-27 10:37:30.207 Guess Who![80103:f803] ミドルネーム: ジョン
2012-06-27 10:37:30.213 Guess Who![80103:f803] 姓: コーン
2012-06-27 10:37:30.219 Guess Who![80103:f803] 組織: Apple
2012-06-27 10:37:30.225 ゲス・フー![80103:f803] 部門: NULL
2012-06-27 10:37:30.230 Guess Who![80103:f803] 役職: NULL
iOS シミュレーターの連絡先アプリケーションで、各連絡先のすべてのフィールドに入力するようにしましたが、何らかの理由で「部門」と「役職」フィールドが正しく印刷されません。
基本的に、「役職」と「部門」のフェッチャー メソッドの何が問題なのか疑問に思っています。
前もって感謝します!