[英]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.