Reputation: 31364
Class "Person" is inherited by "Employee" which is inherited by "EmployeeList"
In my main model I initialize a new Employee
object, setting the firstName
and lastName
, and then addEmployee
to an EmployeeList
.
Inside the addEmployee
method I want to sort the NSArray of Employee objects by lastName
Here is what I've tried but it's not sorting the list.
#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++;
}
Main model:
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];
Upvotes: 0
Views: 187
Reputation: 318854
Change this:
[self.employees sortedArrayUsingDescriptors:@[sortDescriptor]];
to:
[self.employees sortUsingDescriptors:@[sortDescriptor]];
Upvotes: 2
Reputation: 17707
Ok your code need a refactor:
#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++;
}
Be careful because you self.employees is mutable.
Upvotes: 1