我正在尝试从地址簿中的联系人处获取Twitter用户名,但我无法执行此操作
我正在使用我发现“google搜索”的代码:
- (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;
}
我已经把if验证“socials”数组为nil,因为我在尝试获取“社交”数组时会遇到异常。
我已经在模拟器和真实设备中尝试了这个代码,其中包含了填充了Twitter信息的联系人,但我获得的“社交”数组总是为零。我从记录中得到了错误的财产?有什么帮助吗?
提前谢谢
答案 0 :(得分:1)
除了需要桥接推送用户名(这只是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