0

私はすべてのユーザーの連絡先にアクセスし、アプリを介してメールを送信しています。メールアドレスがあれば、すべての連絡先に問題なくアクセスできます。彼らが電子メールアドレスを持っていない場合、エラーが表示されます.アドレスをアドレスのリストに追加する前に、電子メールアドレスを持っているかどうかを確認しようとしています. 私はこのコードを使用しています。if ((ABMultiValueCopyValueAtIndex(email, 0) != NULL)) の if ステートメントの行でエラーが発生します。

メールアドレスを持つ連絡先だけにアクセスするにはどうすればよいですか?

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];
    }
}
4

2 に答える 2

1

エラーは、配列の最初の項目をコピーして、値がNULL. ただし、配列が空の場合、そこからアイテムをコピーすることはできません。

あなたがすべきことは、配列がアイテムを保持しているかどうかを確認することです:

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

}

また、コードは連絡先の最初の電子メール アドレスのみをコピーすることに注意してください。その連絡先に複数の電子メールが設定されている場合は、電子メール配列をループしたい場合があります。

于 2012-08-15T08:02:46.947 に答える