使用Core Data在多个视图控制器之间共享数据

时间:2012-01-27 22:28:53

标签: objective-c ios cocoa-touch core-data

我有一些从UIViewController的子类继承的视图控制器,我们将其称为 SpecialViewController 。 SpecialViewController的要点是存储每个其他视图控制器可以继承的所有冗余属性等。应用程序的生命周期从第一个视图控制器到最后一个视图控制器,收集一些信息,以便最后一个视图控制器有一个完整的数据条目保存到Core Data。目前我的AppDelegate是我的模型,上下文和持久性存储协调器,我有一个名为 Person 的NSManagedObject的子类。我的问题是,将数据构建到最后一个视图控制器,然后保存它的最佳方法是什么?

我是否可以将我的Person NSManagedObject的实例从视图控制器传递到视图控制器,直到它准备好提交到Core Data数据库?

如果是这样,将我的 SpecialViewController 的指定初始化程序设置为以下方法是不好的设计:

-(id)initWithManagedObjectInstance:(Person *)personManagedObject

然后最后我可以获取完整的“Person”数据集(在最后一个视图控制器中)并将其提交到数据库......?

随意争辩我的想法,我想以最好的方式建立它。

1 个答案:

答案 0 :(得分:2)

不,我认为这不会起作用。你通常这样做的方式,或者至少我这样做的方式是将你的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:并复制所有从另一个到新的信息。