我是 iphone 的新手。现在我在我的项目中感到震惊,我的任务是将每个人的姓名和电子邮件地址放在一个数组中。如果有人知道这个,请帮助我来解决这个问题。
问问题
458 次
2 回答
4
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
[menuArray removeAllObjects];
if(menuArray ==nil)
menuArray = [[NSMutableArray alloc] init];
for (int i = 0; i < nPeople; i++)
{
NSMutableDictionary *localDic=[[NSMutableDictionary alloc]init];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
// ABRecordID recordId = ABRecordGetRecordID(ref);
// [localDic setObject:[NSString stringWithFormat:@"%d",recordId] forKey:@"Record_Id"];
//get firstname
CFStringRef firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
[localDic setObject:[NSString stringWithFormat:@"%@",firstName] forKey:@"first_name"];
//get lastname
CFStringRef lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
[localDic setObject:[NSString stringWithFormat:@"%@",lastName] forKey:@"last_name"];
// NSString *contactFirstLast = [NSString stringWithFormat: @"%@ %@",firstName,lastName];
// [localDic setObject:contactFirstLast forKey:@"FullName"];
//get EmailId
ABMutableMultiValueRef EmailIds = ABRecordCopyValue(ref, kABPersonEmailProperty);
CFTypeRef EmailId;
NSString *EmailLabel;
for (CFIndex i = 0; i < ABMultiValueGetCount(EmailIds); i++) {
EmailLabel=[NSString stringWithFormat:@"%@",ABMultiValueCopyLabelAtIndex(EmailIds,i)];
if([EmailLabel isEqualToString:@"_$!<Home>!$_"])
{
EmailId = ABMultiValueCopyValueAtIndex(EmailIds,i);
[localDic setObject:[NSString stringWithFormat:@"%@",EmailId] forKey:@"Email_Home"];
}
else if([EmailLabel isEqualToString:@"_$!<Work>!$_"])
{
EmailId = ABMultiValueCopyValueAtIndex(EmailIds,i);
[localDic setObject:[NSString stringWithFormat:@"%@",EmailId] forKey:@"Email_Work"];
break;
}
}
于 2012-05-09T07:03:20.967 回答
1
这是姓名、电子邮件和电话号码的代码
-(NSMutableArray*)getEmailAndPhoneOfPhoneContacts
{
NSLog(@"getPhoneContacts");
NSAutoreleasePool *pool= [[NSAutoreleasePool alloc] init];
NSMutableArray *tempArray=[[NSMutableArray alloc] init];
ABAddressBookRef iPhoneAddressBook=ABAddressBookCreate();
if(!iPhoneAddressBook)
{
DLog(@"unable to open addressBook");
}
CFArrayRef allPeople=ABAddressBookCopyArrayOfAllPeople(iPhoneAddressBook);
NSMutableArray *peopleArray=[NSMutableArray arrayWithArray:(NSMutableArray*)allPeople];
BOOL shouldReleasePool=NO;
NSInteger i;
NSLog(@"Num of people while getting from address bool %d and syncing",[peopleArray count]);
for(i=0;i<[peopleArray count];i++)
{
ABRecordRef record=[peopleArray objectAtIndex:i];
Contact *objPhoneContact=[[Contact alloc] init];
objPhoneContact.contactType=STATIC_CONTACT;
CFStringRef prefixName=ABRecordCopyValue(record, kABPersonPrefixProperty);
CFStringRef firstName=ABRecordCopyValue(record, kABPersonFirstNameProperty);
CFStringRef middleName=ABRecordCopyValue(record, kABPersonMiddleNamePhoneticProperty);
CFStringRef lastName=ABRecordCopyValue(record, kABPersonLastNameProperty);
CFStringRef suffixName=ABRecordCopyValue(record, kABPersonSuffixProperty);
NSMutableString *contactname =[[NSMutableString alloc] init];
// concating all the names
if (prefixName) {
[contactname appendString:[NSString stringWithString:(NSString*)prefixName]];
CFRelease(prefixName);
}
if (firstName) {
[contactname appendString:[NSString stringWithString:(NSString*)firstName]];
CFRelease(firstName);
}
if (middleName) {
[contactname appendString:[NSString stringWithString:(NSString*)middleName]];
CFRelease(middleName);
}
if (lastName) {
[contactname appendString:[NSString stringWithString:(NSString*)lastName]];
CFRelease(lastName);
}
if (suffixName) {
[contactname appendString:[NSString stringWithString:(NSString*)suffixName]];
CFRelease(suffixName);
}
// if emty then get the organization property
if (contactname == nil || [contactname length]<1) {
CFStringRef orgName=ABRecordCopyValue(record, kABPersonOrganizationProperty);
if (orgName) {
[contactname appendString:[NSString stringWithString:(NSString*)orgName]];
CFRelease(orgName);
}
}
//if still empty then assign (no name) to it
if (contactname == nil || [contactname length]<1)
[contactname setString:@"(no name)"];
objPhoneContact.mContactName = [contactname stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
[contactname release];
contactname = nil;
ABMutableMultiValueRef multi;
int multiCount=0;
multi = ABRecordCopyValue(record, kABPersonPhoneProperty);
NSUInteger phoneIndex_mobile=11;
NSUInteger phoneIndex_iPhone=31;
NSUInteger phoneIndex_home=51;
NSUInteger phoneIndex_work=71;
NSUInteger phoneIndex_main=91;
NSUInteger phoneIndex_home_fax=111;
NSUInteger phoneIndex_work_fax=131;
NSUInteger phoneIndex_pager=151;
NSUInteger phoneIndex_other=171;
multiCount=ABMultiValueGetCount(multi);
if(multiCount ==0)
{
//objPhoneContact.mPhoneNum=@"";
}
else
{
for( int i=0; i < multiCount; i++)
{
ContactProperty* objPhoneContactProperty=[[ContactProperty alloc] init];
objPhoneContactProperty.mContactPropertyString=(NSString*)ABMultiValueCopyValueAtIndex(multi, i);
objPhoneContactProperty.mDisplayName=(NSString*)ABMultiValueCopyLabelAtIndex(multi, i);
objPhoneContactProperty.mDisplayName=[objPhoneContactProperty.mDisplayName stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"_$!<>"]];
// DLog(@"Display name %@",objPhoneContactProperty.mDisplayName);
if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"mobile"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_mobile;
phoneIndex_mobile++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"iPhone"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_iPhone;
phoneIndex_iPhone++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"home"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_home;
phoneIndex_home++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"work"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_work;
phoneIndex_work++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"main"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_main;
phoneIndex_main++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"HomeFAX"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_home_fax;
phoneIndex_home_fax++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"WorkFAX"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_work_fax;
phoneIndex_work_fax++;
}
else if([objPhoneContactProperty.mDisplayName caseInsensitiveCompare:@"pager"]==NSOrderedSame)
{
objPhoneContactProperty.mContactPropId=phoneIndex_pager;
phoneIndex_pager++;
}
else
{
NSRange range1,range2,range3;
range1=[objPhoneContactProperty.mDisplayName rangeOfString:@"mobile" options:NSCaseInsensitiveSearch];
range2=[objPhoneContactProperty.mDisplayName rangeOfString:@"home" options:NSCaseInsensitiveSearch];
range3=[objPhoneContactProperty.mDisplayName rangeOfString:@"work" options:NSCaseInsensitiveSearch];
if (range1.location!=NSNotFound)
{
objPhoneContactProperty.mContactPropId=phoneIndex_mobile;
phoneIndex_mobile++;
}
else if (range2.location!=NSNotFound)
{
objPhoneContactProperty.mContactPropId=phoneIndex_home;
phoneIndex_home++;
}
else if (range3.location!=NSNotFound)
{
objPhoneContactProperty.mContactPropId=phoneIndex_work;
phoneIndex_work++;
}
else
{
objPhoneContactProperty.mContactPropId=phoneIndex_other;
phoneIndex_other++;
}
}
objPhoneContactProperty.mContactDataType=@"Phone";
[objPhoneContact.mPropertyArray addObject:objPhoneContactProperty];
[objPhoneContactProperty release];
}
}
if(multi)
CFRelease(multi);
multi=ABRecordCopyValue(record,kABPersonEmailProperty);
NSUInteger emailIndex_home=301;
NSUInteger emailIndex_work=321;
NSUInteger emailIndex_other=341; //~400
multiCount=ABMultiValueGetCount(multi);
if(multiCount ==0)
{
//objPhoneContact.mEmailId=@"";
}
else
{
for( int i=0; i < multiCount; i++)
{
ContactProperty* objEmailContactProperty=[[ContactProperty alloc] init];
objEmailContactProperty.mContactPropertyString=(NSString*)ABMultiValueCopyValueAtIndex(multi, i);
objEmailContactProperty.mDisplayName=(NSString*)ABMultiValueCopyLabelAtIndex(multi, i);
objEmailContactProperty.mDisplayName=[objEmailContactProperty.mDisplayName stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"_$!<>"]];
if([objEmailContactProperty.mDisplayName caseInsensitiveCompare:@"home"]==NSOrderedSame)
{
objEmailContactProperty.mContactPropId=emailIndex_home;
emailIndex_home++;
}
else if([objEmailContactProperty.mDisplayName caseInsensitiveCompare:@"work"]==NSOrderedSame)
{
objEmailContactProperty.mContactPropId=emailIndex_work;
emailIndex_work++;
}
/*
else if([objEmailContactProperty.mDisplayName caseInsensitiveCompare:@"other"]==NSOrderedSame)
{
objEmailContactProperty.mContactPropId=[NSString stringWithFormat:@"%d",emailIndex_other];
emailIndex_other++;
}
*/
else
{
objEmailContactProperty.mContactPropId=emailIndex_other;
emailIndex_other++;
}
objEmailContactProperty.mContactDataType=@"Email";
[objPhoneContact.mPropertyArray addObject:objEmailContactProperty];
[objEmailContactProperty release];
}
}
if(multi)
CFRelease(multi);
[tempArray addObject:objPhoneContact];
[objPhoneContact release];
if(shouldReleasePool)
{
[innerPool drain];
shouldReleasePool=NO;
}
}
self.mPhoneContactArray=tempArray;
CFRelease(iPhoneAddressBook);
CFRelease(allPeople);
[pool drain];
return [tempArray autorelease];
}
于 2012-05-09T06:58:50.483 回答