Je développe une application qui se connecte à un autre iphone en utilisant bonjour. Une de ses caractéristiques est quand je me connecte à l'autre appareil, il va vérifier automatiquement si j'ai le numéro de téléphone d'autres personnes. Donc, mon problème est comment puis-je vérifier mon carnet d'adresses pour le numéro de téléphone fourni par l'autre appareil?Comment rechercher dans le carnet d'adresses iphone un numéro de téléphone spécifique?
10
A
Répondre
18
Voici un exemple extrait d'une de mes méthodes de carnet d'adresses. Je ne cherchais pas par numéro de téléphone, mais cela vous donne une idée de comment aller de l'avant avec ce dont vous avez besoin:
- (void) scanAddressBookSample
{
NSUInteger i;
NSUInteger k;
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *people = (NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
if (people==nil)
{
NSLog(@"NO ADDRESS BOOK ENTRIES TO SCAN");
CFRelease(addressBook);
return;
}
for (i=0; i<[people count]; i++)
{
ABRecordRef person = (ABRecordRef)[people objectAtIndex:i];
//
// Phone Numbers
//
ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
CFIndex phoneNumberCount = ABMultiValueGetCount(phoneNumbers);
for (k=0; k<phoneNumberCount; k++)
{
CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex(phoneNumbers, k);
CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex(phoneNumbers, k);
CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel(phoneNumberLabel); // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile"
// Find the ones you want here
//
NSLog(@"-----PHONE ENTRY -> %@ : %@", phoneNumberLocalizedLabel, phoneNumberValue);
CFRelease(phoneNumberLocalizedLabel);
CFRelease(phoneNumberLabel);
CFRelease(phoneNumberValue);
}
}
[people release];
CFRelease(addressBook);
}
-1
Utilisez ceci. c'est mon code.
NSLog(@"=====Make People Array with Numbers. Start.");
peopleWithNumber = [[NSMutableDictionary alloc] init];
for (int i=0; i < [people count]; i++) {
NSInteger phoneCount = [self phoneCountAtIndex:i];
if (phoneCount != 0) {
NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init];
for (int j=0 ; j < phoneCount ; j++) {
[phoneNumbers addObject:[self phoneNumberAtIndex:i phoneIndex:j]];
}
[peopleWithNumber addEntriesFromDictionary:
[NSDictionary dictionaryWithObjectsAndKeys:
[NSArray arrayWithArray:phoneNumbers], [self fullNameAtIndex:i], nil]];
}
}
NSLog(@"=====Make People Array with Numbers. End.\n");
méthode de recherche. il serait plus rapide que d'utiliser le tableau
"NSArray * people = (NSArray *) ABAddressBookCopyArrayOfAllPeople (addressBook);"
- (NSArray *)searchNamesByNumber:(NSString *)number {
NSString *predicateString = [NSString stringWithFormat:@"%@[SELF] contains '%@'",@"%@",number];
NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:predicateString,peopleWithNumber,number];
NSArray *names = [[peopleWithNumber allKeys] filteredArrayUsingPredicate:searchPredicate];
return names;
}
5
-(void)createQuickAccessContacts{
NSMutableDictionary contactDictionary= [[NSMutableDictionary alloc]init];
CFArrayRef all = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex n = ABAddressBookGetPersonCount(addressBook);
NSDate *date=[NSDate date];
for(int i = 0 ; i < n ; i++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(all, i);
ABMultiValueRef phones = (ABMultiValueRef)ABRecordCopyValue(ref, kABPersonPhoneProperty);
for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
{
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
NSString *phoneNumber = (__bridge NSString *)phoneNumberRef;
[contactDictionary setObject:(__bridge id)(ref) forKey:phoneNumber];
}
}
NSLog(@" Time taken %f for %i contacts",[[NSDate date] timeIntervalSinceDate:date],[contactDictionary count]);
}
Cela prend comme 0,5 s pour 2.5k contacts pour remplir alors vous pouvez trouver le numéro à l'aide de contact
ABRecordRef ref= [contactDictionary objectForKey:@"89xxxxxxx"];
son super rapide prend comme 0.000x secondes
Questions connexes
- 1. un téléphone spécifique Numéro regex
- 2. iPhone sdk: Comment obtenir le compte de tous les numéros de téléphone dans un carnet d'adresses?
- 3. iPhone API obtenir le numéro de téléphone de l'appareil local
- 4. Carnet d'adresses iPhone - Sélection automatique du propriétaire du téléphone
- 5. Comment rechercher un carnet d'adresses iPhone pour un nom d'utilisateur spécifique basé sur une variable et non sur une chaîne
- 6. Comment capturer un numéro de téléphone
- 7. Appel à un numéro de téléphone via iPhone App
- 8. Nombre total de numéros de téléphone dans le carnet d'adresses iPhone
- 9. comment obtenir le numéro de téléphone dans le périphérique réel
- 10. Comment rechercher le nom d'un contact à partir de son numéro de téléphone sur Android?
- 11. iPhone SDK: Obtenir le nom du contact à partir du numéro de téléphone
- 12. Comment récupérer le numéro de téléphone de l'utilisateur par programme dans l'application iphone?
- 13. iPhone: Comment puis-je composer un numéro de téléphone sans quitter mon application?
- 14. Obtenez des contacts iPhone numéro de téléphone de type
- 15. Composer un numéro de téléphone via Bluetooth
- 16. Spécifier le numéro de téléphone cliquable
- 17. RegEx don permettre le 0 dans le numéro de téléphone
- 18. supprimer le numéro de téléphone d'un document
- 19. convertir le numéro de téléphone en int64
- 20. regex pour le numéro de téléphone
- 21. Comment récupérer le contenu du carnet d'adresses?
- 22. Fractionnement un numéro de téléphone en php
- 23. Valide comme un numéro de téléphone
- 24. iphone numéro de sim
- 25. Récupérer le numéro de téléphone Windows Mobile
- 26. comment obtenir le numéro smsc d'un téléphone dans Android?
- 27. Format numéro de téléphone dans datagridview
- 28. Ajout de nouvelles informations dans le carnet d'adresses iPhone
- 29. reg ex numéro de téléphone
- 30. Pouvez-vous obtenir le numéro de téléphone de l'utilisateur actuel et ses coordonnées via le SDK iPhone?
AlBeebe, Malheureusement, cela prend beaucoup plus de temps sur un appareil (iPhone 4, 4.2). J'ai pris 15 secondes pour un carnet d'adresses de 3000) – Rabih
iphone 3GS ios4.2.2 => prend plus de 40sec pour 2000 contacts.it n'est pas bon. – ChangUZ
Merci beaucoup, excellent travail – wod