从核心数据中的视图传递数据

时间:2012-06-11 16:05:58

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

大家好 - 我是iPhone编程和核心数据的初学者。我目前正在尝试学习核心数据背后的一些理论,并且一直在使用this教程来帮助我在我的应用程序中实现它。

本教程通过使主视图为列出已保存对象的UITableViewController和保存对象的另一个UITableViewController(在属性中输入的位置)来教导。

我正在创建的应用有3个视图。主视图是普通UIViewController(它处理计算),您可以通过点击UIBarButtonItem来保存计算,该UITableViewController将您带到第二个视图,您可以在其中输入更具体的属性。点击“保存”后,您将返回主视图,在该视图中,您可以点击“显示已保存”按钮以访问包含已保存对象的UITableViewController

我已将#{1}}文件#imported到我的主视图的界面文件中,但是当我运行该程序时,我在prepareForSegue方法中出现错误:

    addShoeSizeTVC.managedObjectContext = self.managedObjectContext;

错误是“在'SSFViewController *'类型的对象上找不到属性managedObjectContext”我理解这个错误的含义 - 我的SSFViewController类中没有任何名为managedObjectContext的对象,但我想如果我包含了我的包含仍然可以识别的managedObjectContext的文件。我应该补充一点,在教程中,prepareForSegue方法包含在列表视图中,用于添加新对象UITableViewController的segue。我将此方法移至mainViewController

我的ApplicationDidFinishLaunchingWithOptions方法中的App Delegate中也出现错误:

    controller.managedObjectContext = self.managedObjectContext;

据我所知,这源于与其他错误相同的问题(它提供了相同的错误消息)。

我不明白如何将数据从我的viewA(mainView)传递到viewB(添加对象),返回viewA,然后传递给viewC(查看已保存的对象)。我在prepareForSegue主视图的SSFViewController方法中听说过授权并使用了它:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"Add Object Segue"]) {

        NSLog(@"Setting ObjectsTVC as a delegate of AddObjectTVC");
        AddObjectTVC *addObjectTVC = segue.destinationViewController;
        addObjectTVC.delegate = addObjectTVC.self;
        addObjectTVC.managedObjectContext = addObjectTVC.self.managedObjectContext;
    }
}

同样在addObjectTVC.delegate = addObjectTVC.self;行上,我收到一条警告,上面写着“将AddObjectTVC *'传递给不兼容类型'id'的参数”

我是否必须在主视图中设置NSManagedContext或其他委派方法?或者是我必须添加到我的任何表视图中的东西???

非常感谢你。如果提供正确的信息,我觉得这是一个简单的问题需要解决。我很乐意发布我用过的任何其他方法来解决问题。我是初学者,所以如果你能以初学者友好的方式解释,那就太棒了。

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,如果您想要从ViewA到ViewB的数据,请在ViewB中插入一个属性,您可以将数据从ViewA传递到此@property

示例

ViewB:

  

@property(nonatomic,strong)NSString * yourName;   (别忘了打电话给@synthesize你的名字)

ViewA :(在prepareForSegue方法中)

  

“ViewB-Controller”* controller = segue.destinationViewController;   controller.yourName = self.name

- >名称将传递给ViewB

第二: 我更喜欢从ViewB发送给ViewA的代表“嘿,请保存您的数据”。它使您的控制器变得简单而智能,您无需从所有视图控制器管理保存方法。委托是iOS中的一个重要章节,对初学者来说可能会非常沮丧。 (我在9个月前的情况相同;)) 搜索代理示例并尝试了解它的工作原理(边做边学),如果您对代理有进一步的疑问,我会友好地回答您的问题。

答案 1 :(得分:0)

视图控制器不是managedObjectContext属性,而是UIManagedDocument

上下文通常被描述为“便笺簿”,您的应用程序将在其中使用数据存储。