Comments (3)
Sounds like a good addition to have in the framework.
As for method names, perhaps:
-(NSArray*)unifiedPeople;
-(NSArray*)unifiedPeoplePreferringSource:(RHSource*)source;
or
-(NSArray*)peopleUnifiedUsingDefaultSource;
-(NSArray*)peopleUnifiedUsingSource:(RHSource*)source;
If you have some working code, feel free to post it or chuck it in a pull request.
from rhaddressbook.
I like the second one better :) Was also thinking it would probably be beneficial to be able to unify any array of RHPerson's (for example, returned from peopleOrderedByUsersPreference, etc)
Been hacking around with it a little this afternoon, and this is what I came up with. The first part (based on stackoverflow) is quite clean, but I'm not the happiest with my next part for picking the record we want out of the unified set (pretty sure it's overkill and too laggy)
-(NSArray *)unifyPeople:(NSArray *)people
usingSource:(RHSource *)source
{
// Ref: http://stackoverflow.com/questions/11351454/dealing-with-duplicate-contacts-due-to-linked-cards-in-ios-address-book-api
int defaultSourceID = (int)source.addressBook.defaultSource.recordID;
int wantedSourceID = (int)source.recordID;
NSPredicate *recordIdMatchesDefault = [NSPredicate predicateWithFormat:@"%K = %d",
@"inSource.recordID",
defaultSourceID];
NSPredicate *recordIdMatchesSource = [NSPredicate predicateWithFormat:@"%K = %d",
@"inSource.recordID",
wantedSourceID];
NSMutableOrderedSet *unifiedPeopleSet = [NSMutableOrderedSet orderedSet];
NSMutableOrderedSet *unifiedPeopleForSourceSet = [NSMutableOrderedSet orderedSet];
// Create set of unified contacts
for (RHPerson *person in people)
{
NSMutableSet *contactSet = [NSMutableSet set];
[contactSet addObject:person];
[contactSet addObjectsFromArray:person.linkedPeople];
[unifiedPeopleSet addObject:contactSet];
}
// Filter the set for our desired source (or default)
for (NSSet *contactSet in unifiedPeopleSet)
{
RHPerson *uniquePerson = nil;
NSSet *wantedSet = [contactSet filteredSetUsingPredicate:recordIdMatchesSource];
NSSet *defaultSet = [contactSet filteredSetUsingPredicate:recordIdMatchesDefault];
if (wantedSet.count >= 1)
{
uniquePerson = wantedSet.anyObject;
}
else if (defaultSet.count >= 1)
{
uniquePerson = defaultSet.anyObject;
}
else
{
uniquePerson = contactSet.anyObject;
}
[unifiedPeopleForSourceSet addObject:uniquePerson];
}
return [unifiedPeopleForSourceSet array];
}
from rhaddressbook.
Got the same issue, any resolution about this?.
from rhaddressbook.
Related Issues (20)
- Crash in NSThread+RHBlockAdditions.h HOT 1
- Failed to create RHAddressBookSharedServices instance
- 3-5 Seconds to initialize HOT 1
- implicit conversion
- Localized address format? HOT 1
- New RHPerson in Local addressbook when default is Icloud ?
- Not receiving Notifications in swift
- Native Swift version
- Compile issues with latest source HOT 2
- Update version in Cocoapods repository to 1.2.0 HOT 1
- Why RHAddressBook/AddressBook.h file not find?
- [RHPerson vCardRepresentationForPeople:] crash
- Crash in RHAddressBook vCardRepresentationForPeople
- Xcode 6.3 reports semantic issues HOT 1
- application blocks when i click one group in tableview
- Does RHPerson support NSCoing? How can I NSCoding RHPerson?
- RHRecord crash HOT 3
- import for Swift? HOT 1
- Update the example & README for non-ARC version?
- How can I get google id (social type id)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rhaddressbook.