Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 排序NSMutableArray在目标C中包含NSMutableString_Ios_Objective C_Nsmutablearray_Nsmutablestring - Fatal编程技术网

Ios 排序NSMutableArray在目标C中包含NSMutableString

Ios 排序NSMutableArray在目标C中包含NSMutableString,ios,objective-c,nsmutablearray,nsmutablestring,Ios,Objective C,Nsmutablearray,Nsmutablestring,新手问题 我正在使用包含卡片元素(名称和电子邮件地址)的NSMutableArray*myBook 我希望我的书以降序列表显示 地址簿 #import <Foundation/Foundation.h> #import "AddressCard.h" @interface AddressBook : NSObject @property (nonatomic, copy) NSMutableString *bookName; @property (nonatomic , stro

新手问题

我正在使用包含卡片元素(名称和电子邮件地址)的NSMutableArray*myBook

我希望我的书以降序列表显示

地址簿

#import <Foundation/Foundation.h>
#import "AddressCard.h"
@interface AddressBook : NSObject

@property (nonatomic, copy) NSMutableString *bookName;

@property (nonatomic , strong) NSMutableArray *book;
地址卡

- (NSComparisonResult) compareNames: (id) element{


    return [name compare:[element name]];
}
我的CompareNames方法返回升序结果。我怎样才能返回呢

谢谢

-(void)sortUsingSelector:(SEL)comparator
方法假定按升序对数组的元素进行排序时,如果数组小于参数,则comparator方法应返回
sensorderedescing
,如果数组大于参数,和
sensorderedname
,如果它们相等

由于NSComparisonResult定义为:

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};

typedef NSInteger NSComparisonResult;
您只需要一个下降比较器,类似于:

- (NSComparisonResult)compareNameInDesendingOrder:(AddressCard *)aCard {
    return -[self.name compare:[aCard name]];
}

- (void)sortInDesendingOrder {
    [book sortUsingSelector:@selector(compareNameInDesendingOrder:)];
}

希望有帮助。

尝试
返回[self.name compare:[element name]]@rmaddy它不起作用。啊,根据公认的答案,我误解了你的问题。您的排序正以相反的顺序进行。或者反转比较:
return[aCard.name compare:self.name]
@lancy我改变了compareNames方法:将(AddressCard*)aCard作为参数,它成功了。与使用(id)元素作为参数相比,这真的可以接受吗?@user3213703,id工作得很好,我只是喜欢静态类型检查。
enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};

typedef NSInteger NSComparisonResult;
- (NSComparisonResult)compareNameInDesendingOrder:(AddressCard *)aCard {
    return -[self.name compare:[aCard name]];
}

- (void)sortInDesendingOrder {
    [book sortUsingSelector:@selector(compareNameInDesendingOrder:)];
}