我将 NSFetchedResultsController 放入我的代码中,这样我就可以对表视图数据进行很好的自动分段。
所以我正在运行测试以确保一切正常。我的持久存储中有一个 Book 实体。我将首先以旧方式执行获取,然后尝试使用 NSFetchedResultsController。 2 个代码块之间的区别只有 2 行。
Code withoutNSFetchedResultsController:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:kBookEntityName inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
//The following 2 lines will be replaced by the NSFetchedResultsController
NSMutableArray *mutableFetchResults = [[[self.managedObjectContext executeFetchRequest:request error:nil] mutableCopy] autorelease];
Book *result = (Book*)[mutableFetchResults objectAtIndex:0];
NSString* title = [result valueForKey:@"title"];
NSString* priority = [result valueForKeyPath:@"priority.name"];
[request release];
现在我将这些行替换为 NSFetchedResultsController:
NSFetchedResultsController* fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"title" cacheName:@"BookList"];
Book *result = (Book*)[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
看起来很干。第一个代码块正确获取单个 Book 实体。然而,带有 NSFetchedResultsController 的代码则不然。相反,它返回零。
我的问题是:在此示例中我是否正确配置了 NSFetchedResultsController ?
(注意,NSFetchedResultsController 的 fetchedObjects 属性也是 nil)