【发布时间】:2011-07-23 05:04:36
【问题描述】:
谁能告诉我如何从 iPhone 联系人列表中检索名字和姓氏并在个人应用程序中显示它们?在 iPhone 联系人列表中,有些人有 100 个联系人,我想从这 100 个联系人中检索名字和姓氏,并将它们显示在我的应用中。
有人知道如何从联系人列表中检索并显示在我的应用程序中吗?
【问题讨论】:
标签: ios4
谁能告诉我如何从 iPhone 联系人列表中检索名字和姓氏并在个人应用程序中显示它们?在 iPhone 联系人列表中,有些人有 100 个联系人,我想从这 100 个联系人中检索名字和姓氏,并将它们显示在我的应用中。
有人知道如何从联系人列表中检索并显示在我的应用程序中吗?
【问题讨论】:
标签: ios4
您可以使用此方法在自己的应用程序中同步iPhone设备的联系人信息,并可以显示在自己的列表中。
这里可以使用一个数组——“contactArray”来存储联系人信息。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
contactArray = [[NSMutableArray alloc] init];
[self SyncContactData];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
这是将联系人信息从设备同步到应用程序的方法。
- (void) SyncContactData
{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
for( int i = 0 ; i < nPeople ; i++ )
{
dicContact = [[NSMutableDictionary alloc] init];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i );
if(ABRecordCopyValue(ref, kABPersonFirstNameProperty) != nil || [[NSString stringWithFormat:@"%@",ABRecordCopyValue(ref, kABPersonFirstNameProperty)] length] == 0)
[dicContact setValue:[NSString stringWithFormat:@"%@",ABRecordCopyValue(ref, kABPersonFirstNameProperty)] forKey:@"firstname"];
else
[dicContact setValue:@"" forKey:@"firstname"];
if(ABRecordCopyValue(ref, kABPersonLastNameProperty) != nil || [[NSString stringWithFormat:@"%@",ABRecordCopyValue(ref, kABPersonLastNameProperty)] length] == 0)
[dicContact setValue:[NSString stringWithFormat:@"%@",ABRecordCopyValue(ref, kABPersonLastNameProperty)] forKey:@"lastname"];
else
[dicContact setValue:@"" forKey:@"lastname"];
if(ABRecordCopyValue(ref, kABPersonOrganizationProperty) != nil || [[NSString stringWithFormat:@"%@",ABRecordCopyValue(ref, kABPersonOrganizationProperty)] length] == 0)
[dicContact setValue:[NSString stringWithFormat:@"%@",ABRecordCopyValue(ref, kABPersonOrganizationProperty)] forKey:@"name"];
else
[dicContact setValue:[NSString stringWithFormat:@"%@ %@",[dicContact valueForKey:@"firstname"],[dicContact valueForKey:@"lastname"]] forKey:@"name"];
NSData *data1 = [(NSData *) ABPersonCopyImageData(ref) autorelease];
if(data1 == nil)
[dicContact setObject:@"" forKey:@"image"];
else
[dicContact setObject:data1 forKey:@"image"];
multival = ABRecordCopyValue(ref, kABPersonAddressProperty);
NSArray *arrayAddress = (NSArray *)ABMultiValueCopyArrayOfAllValues(multival);
if([arrayAddress count] > 0)
{
if([[arrayAddress objectAtIndex:0] valueForKey:@"City"] != nil)
[dicContact setValue:[[arrayAddress objectAtIndex:0] valueForKey:@"City"] forKey:@"city"];
else
[dicContact setValue:@"" forKey:@"city"];
if([[arrayAddress objectAtIndex:0] valueForKey:@"State"] != nil)
[dicContact setValue:[[arrayAddress objectAtIndex:0] valueForKey:@"State"] forKey:@"state"];
else
[dicContact setValue:@"" forKey:@"state"];
if([[arrayAddress objectAtIndex:0] valueForKey:@"Street"] != nil)
[dicContact setValue:[[arrayAddress objectAtIndex:0] valueForKey:@"Street"] forKey:@"address1"];
else
[dicContact setValue:@"" forKey:@"address1"];
if([[arrayAddress objectAtIndex:0] valueForKey:@"ZIP"] != nil)
[dicContact setValue:[[arrayAddress objectAtIndex:0] valueForKey:@"ZIP"] forKey:@"postcode"];
else
[dicContact setValue:@"" forKey:@"postcode"];
}
else
{
[dicContact setValue:@"" forKey:@"city"];
[dicContact setValue:@"" forKey:@"address1"];
[dicContact setValue:@"" forKey:@"state"];
[dicContact setValue:@"" forKey:@"postcode"];
}
multival = ABRecordCopyValue(ref, kABPersonPhoneProperty);
NSArray *arrayPhone = (NSArray *)ABMultiValueCopyArrayOfAllValues(multival);
if([arrayPhone count] > 0)
[dicContact setValue:[arrayPhone objectAtIndex:0] forKey:@"telephone"];
else
[dicContact setValue:@"" forKey:@"telephone"];
multival = ABRecordCopyValue(ref, kABPersonEmailProperty);
NSArray *arrayEmail = (NSArray *)ABMultiValueCopyArrayOfAllValues(multival);
if([arrayEmail count])
[dicContact setValue:[arrayEmail objectAtIndex:0] forKey:@"email"];
else
[dicContact setValue:@"" forKey:@"email"];
multival = ABRecordCopyValue(ref, kABPersonURLProperty);
NSArray *arrayURL = (NSArray *)ABMultiValueCopyArrayOfAllValues(multival);
if([arrayURL count])
[dicContact setValue:[arrayURL objectAtIndex:0] forKey:@"website"];
else
[dicContact setValue:@"" forKey:@"website"];
[dicContact setValue:@"" forKey:@"address2"];
[dicContact setValue:@"" forKey:@"mobile"];
[dicContact setValue:@"" forKey:@"fax"];
[dicContact setValue:@"1.000000,1.000000,0.000000,0.000000" forKey:@"color"];
[contactArray addObject:dicContact];
[dicContact release];
}
CFRelease(addressBook);
CFRelease(allPeople);
}
【讨论】:
查看 iOS 文档中的示例应用程序 QuickContacts:
它旨在介绍如何使用通讯簿框架,您可以找到 here 的完整文档。该框架提供了许多用于处理联系人的有用功能。
【讨论】: