Tôi có một thực thể CoreData với hai thuộc tính. Một người gọi là 'vị trí' người khác gọi là 'positionChange'. Cả hai đều là số nguyên trong đó thuộc tính position là vị trí hiện tại và positionChange là sự khác biệt giữa vị trí trước đó và vị trí mới. Điều này có nghĩa là positionChange có thể âm.Sắp xếp các thay đổi vị trí dữ liệu lõi với các bộ mô tả sắp xếp cho iPhone
Bây giờ tôi muốn sắp xếp theo vị tríThay đổi. Nhưng tôi muốn nó bỏ qua các giá trị tiêu cực. Hiện tại tôi sắp xếp nó giảm dần, sẽ cho kết quả: 2, 1, 0, -1, -2. Nhưng những gì tôi đang tìm kiếm là có được kết quả này: 2, -2, 1, -1, 0.
Bất kỳ ý tưởng nào về cách giải quyết điều này bằng cách sử dụng các bộ mô tả sắp xếp?
EDIT
tôi có 2 lớp, một lớp gọi là DataManager và khác có chứa loại NSNumber tôi (positionChange là loại NSNumber).
Trong DataManager Tôi có một phương pháp gọi là 'fetchData:', nơi tôi đang thực hiện lấy yêu cầu của tôi với một mô tả loại:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"positionChange" ascending:NO selector:@selector(comparePositionChange:)];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
tôi đang làm một số công cụ hơn để yêu cầu, nhưng đó không phải là thú vị Cho vấn đề này.
loạiMy NSNumber nên giống hệt như một trong những bạn đã đăng: Trong .h:
@interface NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber;
@end
Và trong .m:
@implementation NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber
{
return [[NSNumber numberWithFloat:fabs([self floatValue])] compare:[NSNumber numberWithFloat:fabs([otherNumber floatValue])]];
}
@end
Khi tôi gọi fetchData trên đối tượng DataManager của tôi Tôi gặp lỗi này:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: comparePositionChange:'
Mọi ý tưởng về trường hợp này có thể là gì? Tôi đã bao gồm tệp tiêu đề danh mục NSNumber trong lớp DataManager của mình.
Bạn có thể thêm trường 'absolutePositionChange' vào mô hình và điền vào nó (trong setter cho' positionChange', nếu có) với 'abs (positionChange)'? Bạn có thể sử dụng trường đó trong bộ mô tả sắp xếp của bạn. –