大家好 — 我是 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。
上下文通常描述为"暂存器",应用将在其中使用数据存储。