Reputation: 21
Im handling a screen which show contacts from contactDictionary with same native device order. I have seen this method in Contacts framework.
/*! The contact comparator for a given sort order. */
+ (NSComparator)comparatorForNameSortOrder:(CNContactSortOrder)sortOrder;
But when I call
NSComparator comparator = [CNContact comparatorForNameSortOrder:CNContactSortOrderUserDefault];
NSArray<CNContact *> *sortedContacts = [listContacts sortedArrayUsingComparator:comparator];
Its not same to when I fetch all contact with CNContactSortOrderUserDefault
CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:@[
[CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName],
CNContactPhoneNumbersKey,
CNContactOrganizationNameKey,
CNContactJobTitleKey,
CNContactBirthdayKey,
CNContactImageDataKey,
CNContactThumbnailImageDataKey,
CNContactImageDataAvailableKey,
CNContactEmailAddressesKey,
CNContactPostalAddressesKey,
CNContactDatesKey,
CNContactSocialProfilesKey,
CNContactPhoneticGivenNameKey,
CNContactPhoneticMiddleNameKey,
CNContactPhoneticFamilyNameKey,
CNContactNicknameKey
]];
CNContactSortOrder sortOder = CNContactSortOrderUserDefault;
fetchRequest.sortOrder = sortOder;
NSError *fetchError = nil;
[contactStore enumerateContactsWithFetchRequest:fetchRequest error:&fetchError usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop){}];
List contact when fetch all:
!Saz
\Sa
“Sa
#Sa
%Sa
‘Sa
(Sa
)Sa
*Sa
}Sa
{Sa
,Sa
-Sa
A
Sa
.Sa
/Sa
:Sa
Sa
!!Sa
!?Saz
;Sa
?Sa
@Sa
[Sa
\Sa
]Sa
??Saz
]!Sa
![Sa
!!Sa
]?Sa
?[Sa
&?Saz
Sa !
=Sa
123hange
My list after sort by comparatorForNameSortOrder
:
-Sa
,Sa
;Sa
:Sa
Sa !
!!Sa
!!Sa
!?Saz
![Sa
!Saz
??Saz
?[Sa
?Sa
.Sa
‘Sa
“Sa
(Sa
)Sa
[Sa
]!Sa
]?Sa
]Sa
{Sa
}Sa
@Sa
*Sa
/Sa
\Sa
\Sa
&?Saz
#Sa
%Sa
=Sa
123hange
A
Sa
Sa
Thanks for watching.
Upvotes: 2
Views: 65