2012-05-01 10 views
4
私は連絡先情報に保存された誕生日を持っていると は、電話番号のようなこれらの連絡先の詳細を取得する連絡先、電子メールを取得したい

、誕生日などiPhone - アドレス帳を使用して連絡先の詳細を取得するにはどうすればよいですか?ここで

は、私が試したものです:

ABAddressBookRef myAddressBook = ABAddressBookCreate(); 
NSArray *allPeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(myAddressBook); 
contactList = [[NSMutableArray alloc]init]; 

    for (id record in allPeople) 
    { 
     NSMutableDictionary *newRecord = [[NSMutableDictionary alloc] init]; 
     CFTypeRef bDayProperty = ABRecordCopyValue((ABRecordRef)record, kABPersonBirthdayProperty); 

     if (ABRecordCopyValue((ABRecordRef)record, kABPersonBirthdayProperty)) 
     { 
       NSDate *date=(NSDate*)bDayProperty; 
       [newRecord setObject:date forKey:@"birthDate"]; 
       date=nil; 
       [date release]; 
     } 
     CFRelease(myAddressBook); 
    } 

何か案が?

+0

Urこのコードをどのメソッドに書くか?値は[newRecord setObject:date forKey:@ "birthDate"]のためにオーバーライドされます。 – Dhara

+0

何がうまくいかなかったのですか? –

答えて

3

このコードを試すことができます。

ABAddressBookRef m_addressbook = ABAddressBookCreate(); 

if (!m_addressbook) { 
    NSLog(@"opening address book"); 
} 

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook); 
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook); 
NSLog(@" cfindex %ld",nPeople); 

for (int i=0;i < nPeople;i++) { 
    NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary]; 

     ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 

    //For username and surname  
    CFStringRef firstName, lastName; 
    firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 
    lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty); 
    [dOfPerson setObject:[NSString stringWithFormat:@"%@ %@", firstName, lastName] forKey:@"name"]; 

    //For Email ids 
    ABMutableMultiValueRef eMail = ABRecordCopyValue(ref, kABPersonEmailProperty); 
    if(ABMultiValueGetCount(eMail) > 0) { 
     [dOfPerson setObject:(NSString *)ABMultiValueCopyValueAtIndex(eMail, 0) forKey:@"email"]; 
     [contactList addObject:dOfPerson]; 
    } 

    //For Phone number 
    NSString* mobileLabel; 
    for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++) 
      { 
     mobileLabel = (NSString*)ABMultiValueCopyLabelAtIndex(phones, j); 
     if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) 
     { 
[dOfPerson setObject:(NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"]; 
     } 
     else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]) 
     { 
[dOfPerson setObject:(NSString*)ABMultiValueCopyValueAtIndex(phones, i) forKey:@"Phone"]; 
      break ; 
     } 

     } 
    } 
0

最後のコードには多くのメモリリークが含まれています。すべての場合、AB ...コピー...(ABRecordCopyValue、ABMultiValueCopyValueAtIndex、ABRecordCopyValue、...)を使用すると、メモリを解放する必要があります。

+0

thanxですが、私はすでにすべてのABをリリースしています...コピーしますが、今は@sonuが提案するような仕事です。 –

関連する問題