gpt4 book ai didi

iphone - 当名字或姓氏为空时,从手机联系人设置部分列表时出现问题

转载 作者:行者123 更新时间:2023-11-29 04:05:36 25 4
gpt4 key购买 nike

我想知道是否有人可以帮助解决我面临的问题。我有使用标准方式检索电话联系人(我必须按姓氏排序)

NSMutableArray *contactArray = [NSMutableArray array]; 
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(kCFAllocatorDefault,CFArrayGetCount(people), people);

CFArraySortValues(peopleMutable, CFRangeMake(0,
CFArrayGetCount(peopleMutable)),
(CFComparatorFunction)ABPersonComparePeopleByName, (void
*)kABPersonSortByLastName);

NSArray *allPeopleArray = (NSArray *)peopleMutable;

我循环遍历每条记录并用以下内容填充 NSMutableDictionarykABPersonFirstNameProperty, kABPersonLastNameProperty,kABPersonEmailProperty、kABPersonPhoneProperty。部分联系方式没有名字或姓氏。所以我会检查他们并使用 [NSNull null] 填充 MutableDictionary 作为名字或姓氏。现在我需要排序这个可变数组。我使用 NSSortDescriptor 进行排序

NSSortDescriptor *aSortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSSortDescriptor *aSortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
[listToSort sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor1, aSortDescriptor2, nil]];
[aSortDescriptor1 release];
[aSortDescriptor2 release];

当我 NSLog listToSort 时,列表已正确排序。

然后我将这个排序的可变数组传递给这个方法,该方法基本上创建一个用于在 UItableview 上显示的sectionList

-(void)setupSectionList:(NSMutableArray *)contactList {
sectionNames = [[NSMutableArray alloc]init];
sectionData = [[NSMutableArray alloc]init];
NSString *previous=@"";
for (NSDictionary *dict in contactList) {
NSString *lastName = [dict objectForKey:@"lastName"];
NSString *firstName = [dict objectForKey:@"firstName"];

NSString *firstLetter = nil;
if ([dict objectForKey:@"lastName"] != [NSNull null]) {
firstLetter = [lastName substringToIndex:1];
}else if ([dict objectForKey:@"firstName"] != [NSNull null]) {
firstLetter = [firstName substringToIndex:1];
}
//Get the first Letter

if (firstLetter) {
//Add the letter to sectioNames when it is different
if (![firstLetter isEqualToString:previous]) {
previous = firstLetter;
[sectionNames addObject:[firstLetter uppercaseString]];
//Now add a new array to our array of arrays
NSMutableArray *oneSection = [NSMutableArray array];
[sectionData addObject:oneSection];
}
//Add this dictionary to the last section array
[[sectionData lastObject] addObject:dict];
}
}
}

这就是排序困惑的地方。这是一个例子。我的联系人只有名字作为名字,没有其他内容。我还有另外 2 位联系人 John Appleseed 和 William Frank。当我从上面的代码中 NSLog 部分数据时,我看到了第一个字母作为 F、A、F。我希望见到 A、F。有人可以帮助我解决这个问题吗?提前感谢您的帮助。

最佳答案

代替此检查:

if (![firstLetter isEqualToString:previous])

试试这个:

if ([sectionNames indexOfObject:firstLetter] == NSNotFound)

确定您是否已经拥有这第一封信。

关于iphone - 当名字或姓氏为空时,从手机联系人设置部分列表时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com