1

testTable という名前のテーブルがあるとします。

(NSNumber*) numValue
(NSString*) stringValue

次に、その中に約 50 のレコードがあるとします。numValueレコードごとに異なります。このように NSFetchedResultController を作成すると:

NSFetchRequest *request = [[NSFetchedResultsController alloc] 
                            initWithFetchRequest: request 
                            managedObjectContext: context 
                            sectionNameKeyPath: @"numValue" 
                            cacheName: @"testTable"]];

そしたら50区画出ます。

私の質問は次のとおりです: 2numValueつのセクションを取得するにはどうすればよいですか?xnumValuex

次のx = 15ようになります。

NSFetchRequest *request = [[NSFetchedResultsController alloc] 
                            initWithFetchRequest: request 
                            managedObjectContext: context 
                            sectionNameKeyPath: @"numValue > 15" 
                            cacheName: @"testTable"]];

考えられる解決策は次のとおりです。

  1. @Dimaが言ったように、エンティティを編集できます。
  2. ではnumberOfSectionsInTableView:、セクション名を見て、それらを と比較できますx。次に、これらの名前を調べて、tableView:numberOfRowsInSection:必要なものを計算できます。でもそれも汚い感じ。最初のアプローチよりも優れていますが、それでもなおです。

更新: まあ、私はそれを行う3番目の方法をほぼ理解しました。@Dimaのリンクに感謝します。コードは次のとおりです。

[self setFetchedResultsController: [[NSFetchedResultsController alloc]
    initWithFetchRequest: request 
    managedObjectContext: context 
    sectionNameKeyPath: [NSString stringWithFormat: @"numValue.compare(%f)", x]];

しかし、KVC 準拠には問題があります。引数を持つメソッド (セレクター) は明らかに KVC 準拠ではありません。回避策のアイデアはありますか?

4

1 に答える 1

1

この回答を参照してください。

オプションの属性をエンティティに追加し、それを一時的なプロパティにします。

次に、ゲッターを作成します(プロパティがと呼ばれると仮定しますsectionGroup

- (NSNumber *) sectionGroup
{
  [self willAccessValueForKey:@"sectionGroup"];
  NSNumber *group = [NSNumber numberWithInt:0];
  if(numValue > 15)
  {
    group = [NSNumber numberWithInt:1];
  }
  [self didAccessValueForKey:@"sectionGroup"];
  return group;
}

sectionGroupこれで、 sectionNameKeyPathとして使用できます。

于 2012-07-11T14:15:48.573 に答える