NSSortDescriptor for NSFetchRequest sorting unexpectedly
我的实体有一个类型为Decimal(NSDecimalNumber)的属性(sortOrder),但是当我使用该属性作为键执行获取请求时,我会以看似随机的顺序获取结果。如果我输出该属性的值,那么我会得到真正奇怪的值,直到得到它的intValue。
示例:第一次运行会产生此结果。第一个值是属性的原始值。第二个是intValue,即我创建对象时属性的实际值-或至少是我认为的。
85438160 10
74691424 20
第二次运行...
85333744 10
85339168 20
第三...
85263696 20
85269568 10
什么鬼?
获取请求:
1 | NSMutableArray *cats = [[NSMutableArray alloc] initWithArray:[CoreDataHelper searchObjectsInContext:@"RestaurantMenuCategory":nil:@"sortOrder":YES:NO:nil]]; |
这是我的CoreDataHelperClass中的searchObjectsInContext方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | +(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; } |
您不能使用%d格式来打印NSDecimalNumber。
NSDecimalNumber是一个Objective-C对象; %d用于打印" int "。如果您使用%d格式字符串,它可能会打印出一些无用的东西,例如对象的地址。请改用"%@ "。