我从数据库中获取值,并使用以下代码创建包含唯一NSMutableDictionary元素的NSMutableArray
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
NSMutableArray *coreArray = [NSMutableArray new];
NSLog(@"count %ld",[results count]); //prints 5
for (NSManagedObjectContext * info in results){
complianceId = [info valueForKey:@"complianceId"];
coreDict setValue:[NSNumber numberWithInt:(int)complianceId] forKey:@"comp_id"];
NSLog(@"inner core dict %@",coreDict); //prints unique elements
[coreArray addObject:coreDict];
NSLog(@"array %@",coreArray); //prints an array containing same dictionary elements
}
结果coreArray
由相同的字典元素组成。我可以对此进行排序吗?
答案 0 :(得分:1)
您只有一个字典coreDict
,并且您在每个循环中将相同的字典添加到您的数组中。
每当您为密钥comp_id
设置值时,它都会在coreDict
的所有实例中更改该值。
相反,你应该在每个循环上创建一个新的字典并将其添加到数组中。
替换:
[coreDict setValue:[NSNumber numberWithInt:(int)complianceId] forKey:@"comp_id"];
[coreArray addObject:coreDict];
使用:
NSDictionary *dict = @{@"comp_id":[NSNumber numberWithInt:(int)complianceId]};
[coreArray addObject:dict];
答案 1 :(得分:0)
请在您的请求中添加NSSortDescriptor和NSPredicate!这将有助于根据键进行排序..
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate* predicate = nil; // Create your predicate here!!
if (predicate)
{
[request setPredicate:predicate];
}
NSString *sortKey = @"complianceId";
if (sortKey)
{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
}
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
答案 2 :(得分:0)
在NSFetchRequest上使用以下代码。它会解决你的问题。
fetchRequest.returnsDistinctResults = YES