首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSManagedObjectContext是自动保存的,还是我正在查看NSFetchedResultsController的缓存?

NSManagedObjectContext是自动保存的,还是我正在查看NSFetchedResultsController的缓存?
EN

Stack Overflow用户
提问于 2010-06-07 04:09:12
回答 3查看 988关注 0票数 0

我正在开发一个在主表视图控制器中使用NSFetchedResultsController的iPhone应用程序。我在主表视图控制器的viewDidload中像这样创建它:

代码语言:javascript
运行
复制
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];

然后,在随后的视图中,我在上下文中创建了一个新对象:

代码语言:javascript
运行
复制
  TestObject *testObject = [NSEntityDescription insertNewObjectForEntityForName:@"TestObject" inManagedObjectContext:context];

TestObject有几个相关的对象,我以同样的方式创建了这些对象,并使用提供的add...Objects方法添加到testObject中。

然后,如果在保存上下文之前,我按cancel并返回到主表视图,则不会按预期显示任何内容。但是,如果我重新启动应用程序,我在上下文中创建的对象将显示在主表视图中。怎么会这样?起初,我认为这是因为NSFetchedResultsController正在从缓存中读取数据,但正如您所看到的,我将其设置为nil只是为了进行测试。此外,在我重新启动后,context hasChanges返回true。这里我漏掉了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-13 04:59:29

上下文永远不会自动保存。如果您看到的是保存,则说明某个地方调用了-save:。QED

为了确认正在向磁盘写入内容,您是否正在查看sqlite文件本身?你可以偷看里面,看看正在写的是什么。如果其中什么都没有,那么可能是在启动时生成默认对象或其他东西。

票数 1
EN

Stack Overflow用户

发布于 2010-07-30 18:13:40

在我看来,你的取消按钮实际上并没有取消任何东西(例如,没有运行undorollback,就像Shaggy Frog所说的那样)。

至于要保存的上下文,您是否在创建Xcode项目时选中了"Use Core Data for storage“框?如果是,则生成的模板将在应用程序退出时包含上下文保存。

在AppDelegate中签入- (void)applicationWillTerminate:(UIApplication *)application

票数 0
EN

Stack Overflow用户

发布于 2010-06-07 04:59:45

如果您在重新启动应用程序时看到对象,则将保存您的NSManagedObjectContext实例。

您的cancel按钮处理程序应该执行undorollback操作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2985728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档