0

これが私のシッチです。Company オブジェクト タイプと Employee オブジェクト タイプがあり、company には多すぎる Employee オブジェクト タイプがあるとします。会社のカテゴリを作成し、メソッドを追加します

-(Employee *)getNextEmployee {
    return (Employee *)self.employees[self.currentEmployeeIndex++];
}

インデックスで NSSet にアクセスできないことはわかっていますが、これはカテゴリであるため、NSArray インスタンス変数も追加できません。このメソッドは頻繁に呼び出されるため、呼び出しごとに NSArray を作成するのは非常に非効率的です。

繰り返しますが、ここでの詳細は無視してください。これは単なる例です。

4

3 に答える 3

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;
于 2013-03-29T05:01:51.017 に答える
1

順序付けが必要な場合は、配列を持つことを回避することはできません (next によって暗示されます)。経済的に配列を持つ方法は、NSManagedObject サブクラスを作成し、それに配列プロパティを追加することです。セットに追加/削除するときに更新します。

于 2013-03-29T05:08:05.157 に答える