使用 Core Data 在多个视图控制器之间共享数据
Posted
技术标签:
【中文标题】使用 Core Data 在多个视图控制器之间共享数据【英文标题】:Sharing data between multiple view controllers with Core Data 【发布时间】:2012-01-27 22:28:53 【问题描述】:我有一些从 UIViewController 的子类继承的视图控制器,我们将其称为 SpecialViewController。 SpecialViewController 的重点是存储所有其他视图控制器可以继承的所有冗余属性等。应用程序的生命周期从第一个视图控制器到最后一个视图控制器,收集了几条信息,以便通过最后一个视图控制器,将完整的数据条目保存到 Core Data。目前,我的 AppDelegate 是我的模型、上下文和持久存储协调器,并且我有一个名为 Person 的 NSManagedObject 子类。我的问题是,将数据构建到最后一个视图控制器然后保存的最佳方法是什么?
我可以将我的 Person NSManagedObject 实例从视图控制器传递到视图控制器,直到它准备好提交到 Core Data 数据库?
如果是这样,将我的 SpecialViewController 的指定初始化程序设置为如下方法是不是不好的设计:
-(id)initWithManagedObjectInstance:(Person *)personManagedObject
最后我可以获取完整的“Person”数据集(在最后一个视图控制器中)并将其提交到数据库...?
请随意争论我的想法,我想以最好的方式构建它。
【问题讨论】:
【参考方案1】:不,我认为这行不通。您通常执行此操作的方式,或者至少是我执行此操作的方式,是将您的 ManagedObjectContext 从您的 AppDelegate 传递给您的第一个 SpecialViewController,然后从那里将它传递给每个连续的 SpecialViewController。确保 SpecialViewController 有一个定义为 @property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
的属性,然后将其设置为您所在的任何类的 ManagedObjectContext:specialViewController.managedObjectContext = self.managedObjectContext;
用于您创建的每个新 SpecialViewController。然后你可以在最后保存它:
NSError *error;
if (![self.managedObjectContext save:&error])
NSLog(@"Error saving: %@", error);
// Error handling
编辑:哦,等等,我明白你在说什么,抱歉。是的,我认为你可以。哈哈。虽然没试过。我可能会通过创建一个与核心数据无关的Person
来做到这一点,将其从一个视图传递到另一个视图,然后当我需要保存它时,创建一个与insertNewObjectForEntityForName:inManagedObjectContext:
相关的核心数据并从另一个到新的。
【讨论】:
两个好建议,我想这是我需要的肯定。我将首先尝试传递上下文,因为我认为如果我决定稍后更改我与 Core Data 一起使用的信息,那会更好。谢谢!以上是关于使用 Core Data 在多个视图控制器之间共享数据的主要内容,如果未能解决你的问题,请参考以下文章