Xcode:使用CoreData进行故事板

时间:2012-06-07 15:56:31

标签: iphone ios core-data storyboard nsmanagedobject

Download my source for reference!

我是iOS开发的新手,我正在尝试自己学习......我需要一些帮助

首先,我在切换到“安全文化大师视图”时遇到错误... Storyboard

  

2012-06-07 11:50:54.720 SafetyCulture [1777:fb03] ***终止应用   由于未捕获的异常'NSInternalInconsistencyException',原因:   '+ entityForName:无法找到实体的NSManagedObjectModel   名称'事件''

我不知道如何解决这个问题......

其次,我想通过两个步骤创建一个记录...而在“问题......”VC中,我希望用户回答大约20个问题 - 但是它们都将被格式化为同样的方式,所以我不需要额外的xib,是吗?所以当它到达最后一个问题时,我希望“下一步”按钮说“完成”或“保存”......应该很简单吗?

我很想与Xcode站在一起......如果您需要更多信息,请告诉我,我会尽我所能!

3 个答案:

答案 0 :(得分:1)

如果您要在现有项目中处理核心数据,请按照此链接中的说明Adding Core Data Existing iPhone Projects

对于第二个问题:您不需要添加更多视图,只需使用UIScrollView并根据需要进行扩展。

答案 1 :(得分:1)

我追踪了抛出异常的代码:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];

在方法- (NSFetchedResultsController *)fetchedResultsController中,是同名属性的自定义setter,如果不存在则初始化一个。真正的问题是self.managedObjectContext目前是零。代码中没有任何地方是主视图控制器分配了managedObjectContext。

最简单的方法是以这种方式从AppDelegate中获取它

#import "safetyCultureAppDelegate.h" //this needs to be at the top to make sure the compiler knows what you’re on about.
...
self.managedObjectContext = [(safetyCultureAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; //put this in the viewDidLoad, or wherever you can set it when the Master VC is created.

使用断点很容易解决这个问题,我建议您学习如何使用断点,因为它们对于像这些可重现的错误非常有用。

关于你的第二个问题,有一百万种方法可以给这只猫留下皮肤。创建一堆场景并在它们之间推送segue并给它们一个共享的“问题类”没有任何问题。它看起来很不错,并且不会涉及太多代码。表现不会成为问题。

也就是说,如果你想以编程方式进行操作,请使用NSDrray的NSDrray,每个dict都有一个问题和可能的答案,并编程控制器在回击或向前时从阵列加载它们,记住要保存。如果问题是静态的,我真的敦促你使用Storyboard方法。远没那么繁琐。

断点和细分都很好,但是现在我劝你喝咖啡,拿些饼干,然后阅读Core Data Programming Guide封面。您会发现Apple的文档易于访问。

如果你真的是新手,请按照this advice.这对我有用。

答案 2 :(得分:0)

我不相信这是一个故事板问题。您的视图控制器需要设置Core Data堆栈。检查调用entityForName:的代码是否设置了有效NSManagedObjectContext

Core Data堆栈是Core Data需要运行的一些对象。在使用Core Data创建的标准Xcode模板中,这些对象在Application Delegate中设置。

如果您愿意,Core Data的“基本单位”是NSManagedObject。您在建模工具中为实体建模,然后使用Xcode从模型生成类。这些生成的类是NSManagedObjectObject的子类。

您通常与NSManagedObjectContext进行交互。 NSManagedObjectContext就像一个“暂存器”,您可以在其中对NSManagedObjects进行更改。上下文是应用程序委托设置的核心数据堆栈的顶部。

在Xcode中创建新项目时,系统会提示您输入一些信息,包括是否使用Core Data。如果选中该框,Xcode将设置持久性存储协调器托管对象上下文。这是您的核心数据堆栈的基础知识。

通常,您可以传递对应用委托的托管对象上下文的引用。 (您无法从多个线程访问相同的上下文。核心数据和多线程是一个单独的章节。)然后,无论何时实例化新对象,都可以将其直接插入到托管对象上下文中。

要保存,请在上下文中调用save。