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



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

本教程通过使主视图成为列出已保存对象的UITableViewController和保存对象的另一个UITableViewController(您可以在其中输入属性)进行教学。

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

我已经将 #imported UITableViewController文件包含在主视图的界面文件中,但是当我运行该程序时,我在prepareForSegue方法中的这一行出现错误:

    addShoeSizeTVC.managedObjectContext = self.managedObjectContext;

错误是"在类型为'SSFViewController*'的对象上找不到属性managedObjectContext"我理解此错误的含义 — 我的SSFViewController类中没有任何名为managedObjectContext的对象,但我认为如果我包含包含managedObjectContext的文件,它仍然会被识别。我应该补充一点,在本教程中,prepareForSegue 方法包含在添加新对象UITableViewController segue 的列表视图中。我将此方法移至我的mainViewController.

我在ApplicationDidFinishLaunchingWithOptions方法中的应用程序委托中也收到错误:

    controller.managedObjectContext = self.managedObjectContext;

我知道这源于另一个错误的相同问题(它给出了相同的错误消息)。

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

- (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 或其他委派方法?还是我必须添加到我的任何表视图中???

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

谢谢!

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

观点B:

@property(非原子,强)NSString *您的姓名; (别忘了叫@synthesize你的名字)

视图A:(在准备ForSegue方法中)

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

-

->名称将传递给ViewB

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

具有 managedObjectContext 属性的不是视图控制器,而是具有 UIManagedDocument。

上下文通常描述为"暂存器",应用将在其中使用数据存储。

最新更新