Để tạo một danh sách các địa chỉ liên lạc mà kết hợp trong danh bạ liên kết:
Lưu ý: tài liệu tham khảo ABPerson được lưu trữ trong tùy chỉnh Person trường lớp. Tất cả mọi người sau đó được lưu trữ trong một từ điển addressBookDictionary sử dụng recordID của mỗi người làm khóa.
1. Nhận tất cả ABPersons using ABAddressBookCopyArrayOfAllPeople. Lưu trữ những người trong mảngPersonRecords.
2. Lặp lại tất cả ABPersons.
2,1 Nhận một danh sách những người liên quan đối với từng ABPerson. Sử dụng
ABPersonCopyArrayOfAllLinkedPeople (ABRecordRef person);
Nếu không có liên hệ được liên kết, phương pháp này sẽ trả về một mảng bao gồm cả người đó tham chiếu. Vì vậy, nếu mảng trả về có số> 1, người đó đã liên kết với nhau.
2.2 Thêm người được liên kết vào NSMutableSet. Những người được liên kết này sẽ bị bỏ qua và không được xử lý trong các lần lặp lại trong tương lai.
2.3 Tạo cá thể cá nhân cho ABPerson hiện tại.
2.4 Hợp nhất thông tin người được liên kết với cá nhân. Một người được liên kết có thể có số điện thoại khác nhau, vì vậy bạn cần hợp nhất chúng lại với nhau.
NSArray *allPersonRecords = (NSArray *) ABAddressBookCopyArrayOfAllPeople(self.addressBook);
NSMutableSet *linkedPersonsToSkip = [[NSMutableSet alloc] init];
for (int i=0; i<[allPersonRecords count]; i++){
ABRecordRef personRecordRef = [allPersonRecords objectAtIndex:i];
// skip if contact has already been merged
//
if ([linkedPersonsToSkip containsObject:personRecordRef]) {
continue;
}
// Create object representing this person
//
Person *thisPerson = [[Person alloc] initWithPersonRef:personRecordRef];
// check if there are linked contacts & merge their contact information
//
NSArray *linked = (NSArray *) ABPersonCopyArrayOfAllLinkedPeople(personRecordRef);
if ([linked count] > 1) {
[linkedPersonsToSkip addObjectsFromArray:linked];
// merge linked contact info
for (int m = 0; m < [linked count]; m++) {
ABRecordRef iLinkedPerson = [linked objectAtIndex:m];
// don't merge the same contact
if (iLinkedPerson == personRecordRef) {
continue;
}
[thisPerson mergeInfoFromPersonRef:iLinkedPerson];
}
}
[self.addressBookDictionary setObject:thisPerson forKey:thisPerson.recordID];
[thisPerson release];
[linked release];
}
[linkedPersonsToSkip release];
[allPersonRecords release];
Nguồn
2012-04-08 12:58:45
hi, bạn có thể mô tả những gì lớp Person chứa trong mã của bạn không? – HarshIT
vâng tôi muốn sử dụng lớp này nhưng làm cách nào tôi có thể lấy nó – khaled
Vui lòng mô tả - Lớp người không tìm thấy .. @MinTsai –