2

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

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

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

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

    addShoeSizeTVC.managedObjectContext = self.managedObjectContext;

错误是“在'SSFViewController *'类型的对象上找不到属性managedObjectContext”我理解这个错误的含义-我的SSFViewController类中没有任何名为managedObjectContext的对象,但我想如果我包含我的文件包含仍可识别的 managedObjectContext。我应该补充一点,在本教程中,该prepareForSegue方法包含在列表视图中,以便继续添加新对象UITableViewController。我将此方法移至我的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或另一个委托方法?或者它是我必须添加到我的任何表视图中的东西???

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

谢谢!

4

2 回答 2

1

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

例子

视图B:

@property (nonatomic, strong) NSString *yourName; (不要忘记调用 @synthesize yourName )

ViewA:(在 prepareForSegue 方法中)

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

--> 名称将传递给 ViewB

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

于 2012-06-11T17:34:07.940 回答
0

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

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

于 2012-06-11T16:17:29.273 回答