Core Dataを使い、TableViewオブジェクトを生成した場合、そのままのコードでは全件が抽出対象となる。
※Core Dataを使ったデータの取り扱い
http://iphone-app-developer.seesaa.net/article/137474933.html
このコードにNSPredicateによりキーを指定して条件抽出した場合でも、全件が抽出されてしまう。
これを回避して、キーを指定したデータのみ抽出されるようにするためには、キャッシュをクリアする必要がある。
具体的には、NSPredicateを設定して、NSFetchedResultsControllerでデータを読み出す前に、deleteCacheWithNameでキャッシュをクリアする。
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Hoge" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:0]; // 0は無制限
NSMutableString *predicateCommand = [[NSMutableString alloc] initWithString: @"hogeItem = '"]; // キーを設定
[predicateCommand appendString: hogehoge];
[predicateCommand appendString: @"'"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateCommand];
[fetchRequest setPredicate: predicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[NSFetchedResultsController deleteCacheWithName:@"Root"]; // キャッシュをクリア
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; // データの読み出し
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
[predicateCommand release];
return fetchedResultsController;
}
参考記事:
http://d.hatena.ne.jp/watanata2000/20101214/1292316099
http://cocoadays.blogspot.com/2010/07/uisearchdisplaycontroller_15.html
http://stackoverflow.com/questions/2193738/how-to-use-nsfetchedresultscontroller-and-uisearchdisplaycontroller
タグ:iPhone