NSManagedObject自动保存一些属性?

时间:2014-05-24 03:53:28

标签: ios core-data

我有一个NSFetchedResultsController用于填充UITableView一些已保存的NSManagedObjects(每个都有NSMutableAttributedString属性)。在用户选择单元格后,我检索相应的NSManagedObject,将其传递给下一个视图控制器,并将NSFetchedResultsController设置为nil。在下一个视图控制器上,我编辑NSManagedObject的{​​{1}}并且不要保存它。这是我的问题,如果我现在回到上一个视图控制器,并从同一个单元重新选择相同的NSMutableAttributedStringNSManagedObject仍然具有我之前所做的相同编辑。有谁知道这是为什么以及如何防止它?一些代码片段:

在我的app delegate中:

NSMutableString

具有- (NSString *) saveContext { NSManagedObjectContext *context = [self managedObjectContext]; NSError *error; if (![context save:&error]) { return [error localizedDescription]; } else { return nil; } } UITableView

的视图控制器
fetechedResultsController

1 个答案:

答案 0 :(得分:3)

NSFetchedResultsController并没有真正保存任何东西。它是保存(或更改)内容的NSManagedObjectContext。即使您创建了一个新的NSFetchedResultsController,也会继续将它与相同的NSManagedObjectContext重新关联:

...inManagedObjectContext:[self.appDelegate managedObjectContext]]

所以这样想吧:一个托管对象的所有变化......由NSManagedObjectContext管理好。如果使用相同 NSManagedObjectContext创建新的NSFetchedResultsController,则对该托管对象的任何请求都将是相同的(无论是否已保存 - 除非您已杀死该应用程序)。

换句话说,当应用程序仍在运行时,NSManagedObjectContext将在被询问时返回它在内存中的相同托管对象...即使它与新的NSFetchedResultsController相关联。储蓄是一项完全不同的活动。保存对象意味着即使在其环境关闭后它也会存活。但在这种情况下,您不会关闭环境(NSManagedObjectContext)。作为测试,您可以尝试这样做:让第二个VC对托管对象进行更改,但在返回第一个VC之前终止应用程序(不仅仅是暂停)。然后重新启动应用程序,我打赌你不会看到任何改变(因为你没有保存它)。