У моей сущности есть свойство (sortOrder), имеющее тип Decimal (NSDecimalNumber), но когда я выполняю запрос на выборку, используя это свойство в качестве ключа, я получаю обратно результаты в, казалось бы, случайном порядке. Если я выведу значение свойства, я получу действительно странные значения, пока не получу intValue.
Пример: первый запуск дает этот результат. Первое значение - это необработанное значение свойства. Вторым является intValue, фактическое значение свойства, когда я создал объект - или, по крайней мере, я думал.
85438160 10
74691424 20
Второй запуск ...
85333744 10
85339168 20
Третий ...
85263696 20
85269568 10
Какого черта?
Запрос на получение:
NSMutableArray *cats = [[NSMutableArray alloc] initWithArray:[CoreDataHelper searchObjectsInContext:@"RestaurantMenuCategory":nil:@"sortOrder":YES:NO:nil]];
Вот метод searchObjectsInContext из моего CoreDataHelperClass:
+(NSMutableArray *) searchObjectsInContext: (NSString*)entityName : (NSPredicate *)predicate : (NSString*)sortKey : (BOOL)sortAscending : (BOOL)distinct : (NSString*)distinctProperty
{
RestaurantController *ctrl = [RestaurantController sharedRestaurantController];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:ctrl.managedObjectContext];
[request setEntity:entity];
if(distinct==YES){
[request setReturnsDistinctResults:YES];
}
if(distinctProperty!= nil){
[request setPropertiesToFetch :[NSArray arrayWithObjects:distinctProperty,nil]];
}
if(predicate != nil){
[request setPredicate:predicate];
}
if(sortKey != nil){
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:sortAscending];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
}
NSError *error;
NSMutableArray *mutableFetchResults = [[[ctrl.managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease];
[request release];
return mutableFetchResults;
}