我正在为一个应用程序进行联系人操作。我的要求是保持与本机电话簿相同的顺序。如果本机有一些变化,通过某个字段和某个订单规范进行一次提取,我应该直接了解存在的位置或要插入的位置。
在本机电话簿上应用 ABPersonComparePeopleByName 排序。发现,首先按名字排序,然后是姓氏,最后是电话号码。如果联系人中没有名字,则将按顺序首先列出具有名字的联系人。
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
kCFAllocatorDefault,
CFArrayGetCount(people),
people
);
CFArraySortValues(
peopleMutable,
CFRangeMake(0, CFArrayGetCount(peopleMutable)),
(CFComparatorFunction) ABPersonComparePeopleByName,
(void*) ABPersonGetSortOrdering()
);
在本地电话簿上,给
NSFetchRequest* contactReq = [[NSFetchRequest alloc] init];
[contactReq setSortDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)],[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES selector:@selector(caseInsensitiveCompare:)],[NSSortDescriptor sortDescriptorWithKey:@"phoneNumber" ascending:YES selector:@selector(caseInsensitiveCompare:)], nil]];
问题是,我在本地电话簿上获得的第一个联系人既没有名字也没有姓氏。其中,它们是本地电话簿上的最后一个条目。
所以,我要求我应该指定哪种排序来获取电话簿排序。
谢谢,文奇