核心数据按两个Descriptor对数据进行排序
Posted
技术标签:
【中文标题】核心数据按两个Descriptor对数据进行排序【英文标题】:Core data sort data by two Descriptor 【发布时间】:2013-09-15 04:22:56 【问题描述】:我在我的 ios 应用程序中使用了核心数据。现在我有一个表,其中有两列。
类别
顺序(其中有 NSNumber 1、2、5)
我想获取数据,所以它会首先按类别名称的字母顺序排序,然后按订单号排序。
我使用了以下代码:
NSEntityDescription *entity_Maintness = [NSEntityDescription
entityForName:@"Maintness" inManagedObjectContext:__managedObjectContext];
[fetchRequest_Maintness setEntity:entity_Maintness];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"type" ascending:YES];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"serialNumber" ascending:NO];
NSArray *sortDescriptors12 = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor, nil];
[fetchRequest_Maintness setSortDescriptors:sortDescriptors12];
但数据仅按类别排序,而不是按序列号。
感谢您的帮助。
【问题讨论】:
您的排序描述符看起来不错。你能展示你的实际结果(和预期的结果)吗? 可能是导致问题的数据类型。例如,如果您有一个字符串类型,并且您想要对 10,15,120 进行排序,您实际上会返回 10,120,15。这曾经让我很头疼。祝你好运 【参考方案1】:上面的代码看起来没问题。也许您的代码中的其他地方存在问题?这是我为您快速生成的一些代码,可以作为起点??
#import "MainViewController.h"
#import "Maintness.h"
@interface MainViewController ()
@property (weak, nonatomic) IBOutlet UITextField *type;
@property (weak, nonatomic) IBOutlet UITextField *serialNumber;
@property (strong, nonatomic) NSManagedObjectContext *context;
- (IBAction)addButtonPressed:(id)sender;
- (IBAction)retrieveButtonPressed:(id)sender;
@end
@implementation MainViewController
#pragma mark - lazy instantiation
- (NSManagedObjectContext *)context
if (!_context)
id appDelegate = (id)[[UIApplication sharedApplication] delegate];
_context = [appDelegate managedObjectContext];
return _context;
#pragma mark - core data interactions
- (IBAction)addButtonPressed:(id)sender
NSError *error = nil;
Maintness *newMaintness = nil;
newMaintness = [NSEntityDescription insertNewObjectForEntityForName:@"Maintness" inManagedObjectContext:self.context];
newMaintness.type = self.type.text;
newMaintness.serialNumber = self.serialNumber.text;
if (![self.context save:&error])
NSLog(@"Oh no - error: %@", [error localizedDescription]);
else
NSLog(@"It appears the details were added ok");
- (IBAction)retrieveButtonPressed:(id)sender
NSError *error = nil;
// Set up fetch
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
// Set up entity
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Maintness" inManagedObjectContext:self.context];
[fetch setEntity:entity];
// Set up sorting
// - sorts in order of array
NSSortDescriptor *primarySortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"type" ascending:YES];
NSSortDescriptor *secondarySortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"serialNumber" ascending:NO];
NSArray *sortDescriptors = @[primarySortDescriptor, secondarySortDescriptor];
[fetch setSortDescriptors:sortDescriptors];
NSArray *results = [self.context executeFetchRequest:fetch error:&error];
for (Maintness *result in results)
NSLog(@"type: %@ serial number: %@", result.type, result.serialNumber);
@end
【讨论】:
serialNumber
作为字符串:坏主意。
取决于您的序列号的用途。很多产品的“序列号”中都有字母。我只是想给出一些示例代码,我认为这不是拒绝答案的理由。也许你可以贡献你的想法??以上是关于核心数据按两个Descriptor对数据进行排序的主要内容,如果未能解决你的问题,请参考以下文章