2012-08-15 156 views
0

我正在訪問所有的用戶聯繫人並通過應用程序通過電子郵件發送給他們。如果他們有電子郵件地址,我可以訪問所有聯繫人。如果他們沒有電子郵件地址,那麼它會給我一個錯誤,我試圖在將地址添加到地址列表之前檢查他們是否有電子郵件地址。我正在使用此代碼。 if((ABMultiValueCopyValueAtIndex(email,0)!= NULL))如何僅通過地址簿中的電子郵件地址訪問聯繫人?

如何才能訪問有電子郵件地址的聯繫人?

NSMutableArray* contactsArray = [NSMutableArray new]; 
ABAddressBookRef m_addressbook = ABAddressBookCreate(); 


CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook); 
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook); 
for (int i=0;i < nPeople;i++) 
{ 
    NSMutableDictionary* tempContactDic = [NSMutableDictionary new]; 
    ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 
    CFStringRef firstName, lastName; 
    firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 
    lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty); 
    NSString *name = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 
    [tempContactDic setValue:name forKey:@"name"]; 


    //fetch email id 
    NSString *strEmail; 
    ABMultiValueRef email = ABRecordCopyValue(ref, kABPersonEmailProperty); 

    if ((ABMultiValueCopyValueAtIndex(email, 0) != NULL)) 
    { 

    CFStringRef tempEmailref = ABMultiValueCopyValueAtIndex(email, 0); 
    strEmail = (__bridge NSString *)tempEmailref; 

    [contactsArray addObject:strEmail]; 
    } 
} 

回答

1

的錯誤是因爲你想檢查是否有可複製的第一個項目在數組中,並檢查值NULL的電子郵件地址。但是,如果數組爲空,則不能從中複製任何項目。

你應該做的是檢查,如果數組中存放任何物品:

if (ABMultiValueGetCount(email) > 0) { 
    // There is at least one item in the email array/ 

} 

也知道他們是你的代碼只複製了第一個電子郵件地址,聯繫人,如果有更多的則1電子郵件是爲該聯繫人設置,您可能需要循環訪問電子郵件數組。

1

U可以使用此代碼從聯繫人中提取所有用戶的所有電子郵件。

- (void) getEmailsOfAllContacts 
{ 
    ABAddressBookRef _addressBookRef = ABAddressBookCreate(); 
    NSArray * allPeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBookRef); 

    for (id record in allPeople) 
    {   
     CFTypeRef emailProperty = ABRecordCopyValue((__bridge ABRecordRef)record, kABPersonEmailProperty); 

     NSArray * allEmailArray = ((__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(emailProperty)); 

     NSString * email; 

     for (int i = 0; i < [allEmailArray count]; i++) 
     { 
      email = [allEmailArray objectAtIndex: i]; 
      if (isEmpty(email) == NO) 
      { 
       [_allContactsEmailArray addObject: email]; 
      } 
     } 
    } 

    CFRelease(_addressBookRef); 
    allPeople = nil; 
} 
相關問題