这是我的女巫。假设我有公司和员工对象类型,公司有很多员工。我为公司创建了一个类别并添加了一个方法
-(Employee *)getNextEmployee {
return (Employee *)self.employees[self.currentEmployeeIndex++];
}
我意识到我无法通过索引访问NSSet,但由于它是一个类别,我也无法添加NSArray实例变量。这种方法经常被调用,因此为每次调用创建一个NSArray效率非常低。
同样,请在此处忽略具体细节,这只是一个例子。
答案 0 :(得分:2)
编辑:抓住我之前的回答,建议使用NSSet的allObjects属性。考虑到它让我意识到allObjects不能保证每次都以相同的顺序返回数组。
相反,我建议您使用链接列表。为Employee类创建previousEmployee属性,并且每次创建新Employee时,使用您分配前一个员工的逻辑。它可以基于进入日期:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
request.fetchLimit = 1;
NSSortedDescriptor *sortDescriptor = [sortDescriptorWithKey:@"entryDate" ascending:NO];
// Do further setup...
Employee *latestEmployee = // fetch result...
Employee *newEmployee = // create new employee
newEmployee.previousEmployee = latestEmployee;
答案 1 :(得分:1)
如果你想要订购,那么就没有一个数组了(下一个暗示)。经济地拥有数组的方法是创建NSManagedObject子类并向其添加数组属性。当您从集合中添加/删除时更新它。
答案 2 :(得分:0)
@danh和@ pedro.m都给出了很好的答案。我结束了两者的混合。我创建了一个新类来管理我的进程而不是子类,我直接从公司的关系属性中拉出了员工。像这样:
@implementation CompanyProcessRunner
-(void)setCompany:(Company *)newCompany
{
company = newCompany;
employees = [company.employees sortedArrayUsingDescriptors:[NSSortDescriptor descriptorWithKey:@"order" ascending:YES]];
}
-(Employee *)nextEmployee
{
company.currentEmployeeIndex += 1;
return (Employee *)[employees objectAtIndex:company.currentEmployeeIndex];
}
@end
感谢大家的帮助!