我正在开发一个 iPhone 应用程序,我在主表视图控制器中使用 NSFetchedResultsController。我在主表视图控制器的 viewDidload 中这样创建它:
NSSortDescriptor *sortDescriptorDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSSortDescriptor *sortDescriptorTime = [[NSSortDescriptor alloc] initWithKey:@"start" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorDate,sortDescriptorTime, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptorDate release];
[sortDescriptorTime release];
[sortDescriptors release];
controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:@"date"
cacheName:nil];
[fetchRequest release];
NSError *error;
BOOL success = [controller performFetch:&error];
然后,在后续视图中,我在上下文中创建了一个新对象:
TestObject *testObject = [NSEntityDescription insertNewObjectForEntityForName:@"TestObject" inManagedObjectContext:context];
TestObject 有几个相关的对象,我以相同的方式创建并使用提供的 add...Objects 方法添加到 testObject 中。
然后,如果在保存上下文之前,我按下取消并返回主表视图,则没有按预期显示。但是,如果我重新启动应用程序,我在上下文中创建的对象会显示在主表视图中。怎么会?起初,我认为这是因为 NSFetchedResultsController 正在从缓存中读取,但正如您所见,我将其设置为 nil 只是为了进行测试。此外,[context hasChanges] 在我重新启动后返回 true。我在这里想念什么?