0

我有一个班级办公室供应

@interface OfficeSupply : NSObject

@property (nonatomic, strong) NSString *itemName;
@property (nonatomic) int total;
@property (nonatomic) int price;
@property (nonatomic) int quantity;
@property (nonatomic, strong) UITextField *quantityText;
@property (nonatomic, strong) UIImage *itemPic;

-(id)initWithName:(NSString *)itemName total:(int)total price:(int)price quantity:(int)quantity picture:(UIImage *)itemPic;

@end

在我看来,我有

 OfficeSupply *item1 = [[OfficeSupply alloc] initWithName:@"Stapler" total:0 price:50 quantity:0 picture:[UIImage imageNamed:@"stapler.jpg"]];
OfficeSupply *item2 = [[OfficeSupply alloc] initWithName:@"Paper" total:0 price:150 quantity:0 picture:[UIImage imageNamed:@"101291.jpg"]];
OfficeSupply *item3 = [[OfficeSupply alloc] initWithName:@"Pen" total:0 price:45 quantity:0 picture:[UIImage imageNamed:@"pen.jpg"]];
_items =[NSArray arrayWithObjects:item1, item2, item3, nil];

[_items sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];

我已经查找了问题,但无法解决我的问题。

最后一行应该对其进行排序,但我不知道为什么它不会。

我只想按名称对它们进行排序..有什么想法吗?

4

3 回答 3

3

您无法编辑 anNSArray因为它是不可变的,因此您需要执行以下操作:

_items = [_items sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];
于 2013-05-28T22:05:55.693 回答
3

调用sortedArrayUsingDescriptors:返回一个 NSArray 实例,它是您调用该方法的实例的排序表示。所以:

NSArray *sortedItems = [_items sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];

您还可以通过对排序描述符数组使用文字语法来进一步简化。

NSArray *sortedItems = [_items sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];

如果你想继续改变 _items NSArray 实例,那么 create 是作为一个 NSMutableArray 开始的。

// Make sure _items instance variable is declared as an NSMutableArray    
_items =[NSMutableArray arrayWithObjects:item1, item2, item3, nil];

[_items sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];
于 2013-05-28T22:25:49.560 回答
0

将 _items 作为 NSMutableArray ...

NSArray *sortedArray;
sortedArray=[_items sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];

[_items removeAllObjects];
[_items addObjectsFromArray:sortedArray];
于 2013-05-29T05:09:55.147 回答