多くのエピソードを持つポッドキャストエンティティがあると仮定すると、これらのどれがカリングとソートの優先オプションになるかについて混乱しています。
// Always work with the relationship property
- (NSSet*)unfinishedEpisodes {
NSArray* episodes = self.episodes.allObjects;
NSPredicate* predicate = [NSPredicate predicateWithBlock:^BOOL(PodcastEpisode* episode, NSDictionary* bindings) {
return !episode.isFinished;
}];
NSArray* unfinishedEpisodes = [episodes filteredArrayUsingPredicate:predicate];
return [NSSet setWithArray:unfinishedEpisodes];
}
- (NSArray*)unfinishedEpisodesSortedByAge {
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
return [self.unfinishedEpisodes.allObjects sortedArrayUsingDescriptors:sortDescriptors];
}
また
// Fetch specific sets of data as needed
- (NSArray*)unfinishedEpisodes:(NSArray*)sortDescriptors {
NSFetchRequest* fetch = [[NSFetchRequest alloc] initWithEntityName:@"Episode"];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"podcast == %@ AND playcount == 0", self];
fetch.predicate = predicate;
fetch.sortDescriptors = sortDescriptors;
NSArray* results = [KRTDataManager.sharedManager.mainObjectContext executeFetchRequest:fetch error:nil];
return results;
}
- (NSArray*)unfinishedEpisodesSortedByAge {
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
return [self unfinishedEpisodes:@[ sortDescriptor ]];
}
SQLで可能な限り多くのことを行う私の部分は、オプション1の方が優れていると考えるのに苦労していますが、私が読んだことのほとんどは、(NSSet *)エピソードを使用すると、ポッドキャストオブジェクトが入ると非常に安価であることを示しているようです存在。これらの状況で Core データの障害がどのように処理されるかについての私の理解はかなり不安定であり、Core データを実際に SQL データベースと比較すべきではないことを認識しています。ただし、2 つのオプションがどのように構成されているかだけに基づいて考えると、述語とソート記述子をフェッチに組み込むことには何らかの利点があると思います。しかし、関係によって提供されるセットがもたらす利益を補うには十分ではないかもしれません.
ありがとう。