01
02
CFIndex nPeople = ABAddressBookGetPersonCount(addressBooks);
03
04
05
for
(NSInteger i = 0; i < nPeople; i++)
06
{
07
08
TKAddressBook *addressBook = [[TKAddressBook alloc] init];
09
10
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
11
12
CFTypeRef abName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
13
CFTypeRef abLastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
14
CFStringRef abFullName = ABRecordCopyCompositeName(person);
15
NSString *nameString = (__bridge NSString *)abName;
16
NSString *lastNameString = (__bridge NSString *)abLastName;
17
18
if
((__bridge id)abFullName != nil) {
19
nameString = (__bridge NSString *)abFullName;
20
}
else
{
21
if
((__bridge id)abLastName != nil)
22
{
23
nameString = [NSString stringWithFormat:@
"%@ %@"
, nameString, lastNameString];
24
}
25
}
26
addressBook.name = nameString;
27
addressBook.recordID = (
int
)ABRecordGetRecordID(person);;
28
29
ABPropertyID multiProperties[] = {
30
kABPersonPhoneProperty,
31
kABPersonEmailProperty
32
};
33
NSInteger multiPropertiesTotal =
sizeof
(multiProperties) /
sizeof
(ABPropertyID);
34
for
(NSInteger j = 0; j < multiPropertiesTotal; j++) {
35
ABPropertyID property = multiProperties[j];
36
ABMultiValueRef valuesRef = ABRecordCopyValue(person, property);
37
NSInteger valuesCount = 0;
38
if
(valuesRef != nil) valuesCount = ABMultiValueGetCount(valuesRef);
39
40
if
(valuesCount == 0) {
41
CFRelease(valuesRef);
42
continue
;
43
}
44
45
for
(NSInteger k = 0; k < valuesCount; k++) {
46
CFTypeRef value = ABMultiValueCopyValueAtIndex(valuesRef, k);
47
switch
(j) {
48
case
0: {
49
addressBook.tel = (__bridge NSString*)value;
50
break
;
51
}
52
case
1: {
53
addressBook.email = (__bridge NSString*)value;
54
break
;
55
}
56
}
57
CFRelease(value);
58
}
59
CFRelease(valuesRef);
60
}
61
62
[addressBookTemp addObject:addressBook];
63
64
if
(abName) CFRelease(abName);
65
if
(abLastName) CFRelease(abLastName);
66
if
(abFullName) CFRelease(abFullName);
67
}