0

アドレス帳の連絡先から Twitter ユーザー名を取得しようとしていますが、取得できません。

「グーグル」で見つけたこのコードを使用しています:

- (NSString*)getTwitterUsernameFromRecord:(ABRecordRef)record {
    NSString * twitterUsername = nil;

    ABMultiValueRef socials = ABRecordCopyValue(record, kABPersonSocialProfileProperty);

    if (!socials) {
        return nil;
    }

    CFIndex socialsCount = ABMultiValueGetCount(socials);

    for (int k=0 ; k<socialsCount ; k++) {
        CFDictionaryRef socialValue = ABMultiValueCopyValueAtIndex(socials, k);
        if(CFStringCompare( CFDictionaryGetValue(socialValue, kABPersonSocialProfileServiceKey), kABPersonSocialProfileServiceTwitter, 0)==kCFCompareEqualTo) {
            twitterUsername = (NSString*) CFDictionaryGetValue(socialValue, kABPersonSocialProfileUsernameKey);
        }
        CFRelease(socialValue);

        if(twitterUsername)
            break;
    }
    CFRelease(socials);

    return twitterUsername;
}

「socials」配列カウントを取得しようとしたときに例外が発生したため、「socials」配列が nil であることを検証する if を入れました。

このコードをシミュレーターと実際のデバイスで試してみましたが、Twitter 情報が入力されている連絡先がありますが、取得する「ソーシャル」配列は常に nil です。レコードから間違ったプロパティを取得していますか? 何か助けはありますか?

前もって感謝します

4

1 に答える 1

1

あなたの関数は、Twitterのユーザー名(これは単なるARCのものです)をブリッジキャストする必要があることを除けば、ほとんどそのままの状態で機能します。名簿にどのようにアクセスしていますか?

このコードを使用して関数を呼び出すと、次のようになります。

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);

CFIndex contactCount = ABAddressBookGetPersonCount(addressBook);

for( int i = 0; i<contactCount; i++ )
{
    ABRecordRef ref = CFArrayGetValueAtIndex(people, i);
    NSString *twitterHandle = [self getTwitterUsernameFromRecord:ref];
    if (twitterHandle) {
        NSLog(@"record %d has twitter name %@", i, twitterHandle);
    }
}

私はこのコンソール出力を取得します:

2012-06-26 12:09:40.864 AddressBookTest[2246:707] record 57 has twitter name alexshepard
于 2012-06-26T19:14:26.653 に答える