2

下载我的源码供参考!

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

首先,切换到“安全文化主视图”时出现错误... 故事板

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

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

其次,我想通过两步过程创建记录……在“问题……”VC 上,我希望用户回答大约 20 个问题——但它们的格式都相同,所以我不需要额外的xib,对吗?所以当谈到最后一个问题时,我希望“下一步”按钮说“完成”或“保存”......应该很简单吗?

我渴望使用 Xcode 站起来……如果您需要更多信息,请告诉我,我会尽力而为!

4

3 回答 3

1

如果您在现有项目中添加核心数据,请按照此链接添加核心数据现有 iPhone 项目中的说明进行操作

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

于 2012-06-07T16:23:50.677 回答
1

我追踪了引发异常的代码:

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

在您的方法- (NSFetchedResultsController *)fetchedResultsController中,同名属性的自定义设置器,如果不存在则初始化一个。真正的问题是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.

使用断点很容易解决,我敦促您学习如何使用断点,因为它们对于此类可重现的错误非常有用。

至于你的第二个问题,有上百万种方法可以剥这只猫的皮。创建一堆场景并在它们之间进行push segues并给它们一个共享的“问题类”并没有错。它看起来很漂亮,并且不会涉及太多代码。性能不会是问题。

也就是说,如果您想以编程方式执行此操作,请使用 NSDictionaries 的 NSArray,每个 dict 包含一个问题和可能的答案,并对控制器进行编程以在向后或向前点击时从数组中加载它们,记住保存。如果问题是静态的,我真的强烈建议您使用故事板方法。远不那么繁琐。

Breakpoints 和 segues 都很好,但是现在我敦促你冲杯咖啡,买些饼干,并阅读Core Data Programming Guide的封面。您会发现 Apple 的文档非常易于访问。

如果您对此真的很陌生,请遵循此建议。它对我有用。

于 2012-06-08T20:08:22.483 回答
0

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

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

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

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

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

通常,您可能会传递对应用程序委托的托管对象上下文的引用。(你不能从多个线程访问同一个上下文。核心数据和多线程是一个单独的章节。)然后,每当你实例化一个新对象时,你就将它直接插入到托管对象上下文中。

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

于 2012-06-08T14:44:23.320 回答