gpt4 book ai didi

ios - 核心数据 - 检测获取对象中的相等属性

转载 作者:行者123 更新时间:2023-11-28 20:07:04 25 4
gpt4 key购买 nike

我的核心数据模型:

Contact
=======

name
phone number (unique)

我需要显示具有以下条件的联系人 TableView :

如果有多个联系人具有相同的姓名 - 显示姓名+号码
否则 - 仅显示名称

例如,如果我的核心数据联系人是:

Michael, 11112221  
Jon, 33438282
Jon, 72727272
Lisa, 99939393

我的 TableView 应该显示:

Jon (33438282)  
Jon (72727272)
Lisa
Michael

目前我正在使用以下 NSFetchRequest 来显示联系人列表:

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Contact"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]];
request.fetchBatchSize = 20;

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:@"nameFirstLetter"
cacheName:nil];

我正在寻找最有效的方法来了解哪个名字出现了不止一次,这样我就可以在名字旁边显示数字。

最佳答案

如果您使用 NSSQLiteStoreType 作为持久存储,您可以使用 NSExpression 获取重复项:

NSEntityDescription *entity        = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];
NSAttributeDescription *nameDesc = [entity.attributesByName objectForKey:@"name"];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"name"];
NSExpression *countExpression = [NSExpression expressionForFunction:@"count:" arguments:@[keyPathExpression]];

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName: @"count"];
[expressionDescription setExpression: countExpression];
[expressionDescription setExpressionResultType: NSInteger32AttributeType];

NSError *error = nil;
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
[fetch setPropertiesToFetch:@[nameDesc, expressionDescription]];
[fetch setPropertiesToGroupBy:@[nameDesc]];
[fetch setResultType:NSDictionaryResultType];

NSArray *results = [self.managedObjectContext executeFetchRequest:fetch error:&error];
NSArray *duplicates = [results filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"count > 1"]];
NSArray *duplicateNames = [duplicates valueForKeyPath:@"name"];

duplicateNames 包含在数据库中多次出现的联系人姓名。因此,每当 TableView 中显示联系人时,只需查询 duplicateNames 数组以检查实际联系人是否重复。

关于ios - 核心数据 - 检测获取对象中的相等属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749089/

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