0

我正在尝试根据价格字段NSMutableArrayNSMutableDictionarys 进行排序。

NSString* priceComparator(NSMutableDictionary *obj1, NSMutableDictionary *obj2, void *context){

    return @"just for test for the moment";

}

//In other function
arrayProduct = (NSMutableArray*)[arrayProduct sortedArrayUsingFunction:priceComparator context:nil];//arrayProduct is NSMutableArray containing NSDictionarys

在上面的声明中,我收到了以下我想要修复的警告:

Incompatible pointer types sending 'NSString*(NSMutableDictionary *__strong,NSMutableDictionary *__strong,void*)' to parameter of type 'NSInteger (*)(__strong id, __strong id, void*)'
4

1 回答 1

3

如错误所述,您的priceComparator函数需要声明为返回NSInteger,而不是NSString *

NSInteger priceComparator(NSMutableDictionary *obj1, NSMutableDictionary *obj2, void *context){
    if (/* obj1 should sort before obj2 */)
        return NSOrderedAscending;
    else if (/* obj1 should sort after obj2 */)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}

更好的是,NSSortDescriptors如果您需要排序的价格是一个简单的数值,并且始终位于这些字典中的给定键处,则可以使用该数值。我认为这是语法:

id descriptor = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES];
NSArray *sortedProducts = [arrayProduct sortedArrayUsingDescriptors:@[descriptor]];

另请注意,所有sortedArray...方法都返回一个新的普通NSArray对象,而不是NSMutableArray. 因此sortedProducts上面示例代码中的声明。如果你确实需要你的排序数组仍然是可变的,你可以使用 NSMutableArray 的sortUsingFunction:context:orsortUsingDescriptors:方法对数组进行就地排序。请注意,这些方法 return void,因此您不会将结果分配给任何变量,它会arrayProduct就地修改您的对象。

于 2013-08-07T03:39:47.907 回答