[英]Sort NSArray of custom objects by inherited property when adding new object
类“ Person”由“ Employee”继承,而“ Employee”由“ EmployeeList”继承
在我的主模型中,我初始化一个新的Employee
对象,设置firstName
和lastName
,然后将EmployeeList
addEmployee
到EmployeeList
。
在addEmployee
方法中,我想按lastName
对Employee对象的NSArray进行排序
这是我尝试过的方法,但未对列表进行排序。
#import "EmployeeList.h"
@interface EmployeeList()
@property (strong, nonatomic) NSMutableArray *employees; // of Employee
@end
@implementation EmployeeList
- (NSMutableArray *)employees
{
if (!_employees) _employees = [[NSMutableArray alloc] init];
return _employees;
}
- (void)addEmployee:(Employee *)employee
{
[self.employees addObject:employee];
NSSortDescriptor *sortDescriptor =
[NSSortDescriptor sortDescriptorWithKey:@"lastName"
ascending:YES
selector:@selector(caseInsensitiveCompare:)];
[self.employees sortedArrayUsingDescriptors:@[sortDescriptor]];
_numberEmployees++;
}
主要型号:
EmployeeList *mgrList = [[EmployeeList alloc] init];
Employee *employee = [[Employee alloc] init];
employee.firstName = object[@"firstName"];
employee.lastName = object[@"lastName"];
employee.phoneNumber = object[@"phoneNumber"];
[mgrList addEmployee:employee];
更改此:
[self.employees sortedArrayUsingDescriptors:@[sortDescriptor]];
至:
[self.employees sortUsingDescriptors:@[sortDescriptor]];
好的,您的代码需要重构:
#import "EmployeeList.h"
@interface EmployeeList()
@property (strong, nonatomic) NSMutableArray *employees; // of Employee
@end
@implementation EmployeeList
//This is a more elegant solution to init
- (NSMutableArray *)employees
{
dispatch_token_t token;
dispatch_once(&token, ^{
_employees = [NSMutableArray new];
});
return _employees;
}
- (void)addEmployee:(Employee *)employee
{
[self.employees addObject:employee];
NSSortDescriptor *sortDescriptor =
[NSSortDescriptor sortDescriptorWithKey:@"lastName"
ascending:YES
selector:@selector(caseInsensitiveCompare:)];
//This return an array so if you don't take it you don't have any change.
NSArray *newArray = [[self.employees copy] sortedArrayUsingDescriptors:@[sortDescriptor]];
//Then you can remove and add again all the object to the NSMutableArray
[self.employees removeAllObjects];
[self.employees addObjectsFromArray:newArray];
//This is not needed because you can access to this information by
//[self.employees count]
//_numberEmployees++;
}
要小心,因为您的自雇人士是易变的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.