|
|
|
Coping with duplicate contacts on account of linked cards in iOS Address Book API by Todd Melancon
|
|
|
Coping with duplicate contacts on account of linked cards in iOS Address Book API by TODD MELANCON
|
|
Article Posted: 08/23/2013 |
Article Views: 95 |
Articles Written: 406 - MORE ARTICLES FROM THIS AUTHOR |
Word Count: 906 |
Article Votes: 0 |
|
Coping with duplicate contacts on account of linked cards in iOS Address Book API |
|
|
|
Fashion & Cosmetics
|
|
Some beta-users of my upcoming app are reporting that the list of contacts contain a whole lot of duplicate records. I am making use of the outcome from ABAddressBookCopyArrayOfAllPeople as the data source for my customized table view of contacts, and it baffles me that the results are different from the iPhone's 'Contacts' app. When seeking a lot more closely in the Contacts app, it seems that the duplicates originate from entries with "Linked Cards". The screenshots under have been obfuscated a bit, but as you see in my app on the far right, "Celine" shows up twice, though inside the Contacts app on the left there's only one particular "Celine". For those who click the row of that single get in touch with, you get a "Unified Info" card with two "Linked Cards" (as shown inside the center, I did not use Celine's contact particulars simply because they did not match on one particular screenshot): The problems about "Linked Cards" have rather a on Apple's forums for finish customers, but aside from the truth that quite a few point to a 404 assistance web page, I can not realistically go about fixing all of my app's users' address books. I'd considerably rather like to deal with it elegantly and devoid of bothering the user. To create matters worse, it seems I am not the only a single with this issue, because WhatsApp is displaying precisely the same list containing duplicate contacts. Just to be clear regarding the origins from the duplicate contacts, I am not storing, caching or otherwise attempting to be sensible regarding the array ABAddressBookCopyArrayOfAllPeople returns. So the duplicate records come directly from the API call. Does anybody understand how to deal with or detect these linked cards, preventing duplicate records from showing up? Apple's Contacts app does it, how can the rest of us do so too? UPDATE: I wrote a library and place it on Cocoapods to resolve the issue at hand. See my answer below ABAddressBookRef addressBook = ABAddressBookCreate(); NSArray *people = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, ABAddressBookCopyDefaultSource(addressBook)); But that is certainly lame, correct? It targets the on-device address book, but not additional contacts that could possibly be in Exchange or other fancy syncing address books. So here's the remedy you are seeking for: Iterate by way of the ABRecord references Grab every respective "linked references" (using ABPersonCopyArrayOfAllLinkedPeople) Bundle them in an NSSet (to ensure that the grouping may be uniquely identified) Add that NSSet to a further NSSet Profit? You now have an NSSet containing NSSets of linked ABRecord objects. Possessing a great search around the contacts is important to my and a lot of apps, so I spent rather a bit of time having this appropriate, although on the side also addressing the issue of iOS five and 6 compatible address book access (handling user access via blocks). It solves each the a lot of linked cards on account of incorrectly synched sources along with the cards from the newly added Facebook integration. The library I wrote uses an in-memory (optionally on-disk) Core Data shop to cache the address book record ID's, providing a simple background-threaded search algorithm that returns unified address book cards. The source is obtainable on the Twelve Twenty Toolkit github repository, but additional quickly added for your project by means of cocoapods: platform :ios, '5.0' pod 'TwelveTwentyToolkit/UnifiedAddressBook' I've been applying ABPersonCopyArrayOfAllLinkedPeople() in my app for some time now. However, I've just found that it doesn't constantly do the proper issue. By way of example, when you've got two contacts that have the same name but a single has the "isPerson" flag set and the other will not, the above function will not think about them "linked". Why is this an issue? Simply because Gmail(exchange) sources never assistance this boolean flag. When you attempt to save it as false, it's going to fail, and also the make contact with you saved in it's going to come back around the next run of your app as unlinked in the contact you saved in iCload (CardDAV). Related circumstance with social services: Gmail doesn't support them plus the function above will see two contacts with the same names as various if a single includes a facebook account and 1 will not. I'm switching more than to my personal name-and-source-recordID-only algorithm for determining no matter whether two contact records really should be displayed as a single get in touch with. More function but there's a silver lining: ABPersonCopyArrayOfAllLinkedPeople() is butt-slow. Welcome to Stack Overflow. You will find two prior answers, 1 that was already up-voted quite a whole lot, and one more from the original poster identifying what they actually did to resolve the problem. I not certain if what you proposing is significantly diverse from what he placed for other folks to utilize inside a Github download, but I not sure that your answer is truly helping considering the fact that it's not clear that other people can get at your resolution code. I won down-vote you for this, but please do take into consideration no matter if an answer you give is offering new facts when it can be an older question like this. Jonathan Leffler Oct 7 '12 at 4:35If you like celine please Visit our celine wallet! Happy shopping!
Related Articles -
Bags, Online, Shop,
|
Rate This Article |
|
|
|
Do you Agree or Disagree? Have a Comment? POST IT!
Reader Opinions |
|
|
|
|
|
|
|
|
Author Login |
|
|
Advertiser Login
ADVERTISE HERE NOW!
Limited Time $60 Offer!
90 Days-1.5 Million Views
|
|
TIM FAY
After 60-plus years of living, I am just trying to pass down some of the information that I have lea...more
|
|
|
|
|
LAURA JEEVES
At LeadGenerators, we specialise in content-led Online Marketing Strategies for our clients in the t...more
|
|
|
|
|
ADRIAN JOELE
I have been involved in nutrition and weight management for over 12 years and I like to share my kn...more
|
|
|
|
|
GENE MYERS
Author of four books and two screenplays; frequent magazine contributor. I have four other books "in...more
|
|
|
|
|
DONNIE LEWIS
I'm an avid consumer of a smoothie a day living, herbs, vitamins and daily dose of exercise. I'm 60...more
|
|
|
|
|
ALEX BELSEY
I am the editor of QUAY Magazine, a B2B publication based in the South West of the UK. I am also the...more
|
|
|
|
|
SUSAN FRIESEN
Located in the lower mainland of B.C., Susan Friesen is a visionary brand strategist, entrepreneur, ...more
|
|
|
|
|
STEPHEN BYE
Steve Bye is currently a fiction writer, who published his first novel, ‘Looking Forward Through the...more
|
|
|
|
|
STEVE BURGESS
Steve Burgess is a freelance technology writer, a practicing computer forensics specialist as the pr...more
|
|
|
|