Per creare un elenco di contatti che si fonde in contatti collegati:
Nota: i riferimenti ABPerson sono memorizzati in costume persona istanze di classe. Tutte le persone vengono quindi memorizzate in un dizionario addressBookDictionary utilizzando recordID di ogni persona come chiave.
1. Ottenere tutti ABPersons utilizzando ABAddressBookCopyArrayOfAllPeople. Memorizzare le persone in tutto l'array di PersonersonRecords.
2. Passare attraverso tutti gli ABer.
2,1 ottenere un elenco di persone legate per ogni ABPerson. Utilizzare
ABPersonCopyArrayOfAllLinkedPeople (persona ABRecordRef);
Se non ci sono contatti collegati, questo metodo restituirà un array che include la persona di riferimento. Quindi se l'array di restituzione ha un conteggio> 1, la persona ha dei contatti collegati.
2.2 Aggiungere le persone collegate a un NSMutableSet. Queste persone collegate verranno saltate e non elaborate in iterazioni future.
2.3 Creare un'istanza Persona per l'ABPerson corrente.
2.4 Unire le informazioni di persone collegate in istanza di Person. Una persona collegata può avere numeri di telefono diversi, quindi è necessario unirli insieme.
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];
fonte
2012-04-08 12:58:45
ciao, puoi descrivere quale classe Person contiene nel tuo codice? – HarshIT
sì, mi piacerebbe usare questa classe, ma come posso ottenerla? – khaled
Descrivi - La classe della persona non trovata .. @MinTsai –